Skip to content

Commit

Permalink
feat(test): e2e integration test for new helpers
Browse files Browse the repository at this point in the history
  • Loading branch information
rscampos committed Oct 18, 2024
1 parent f5498d0 commit 69f0bce
Show file tree
Hide file tree
Showing 6 changed files with 200 additions and 0 deletions.
2 changes: 2 additions & 0 deletions .github/workflows/pr.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ env:
ICMPv6
DNS
HTTP
HTTPRequest
HTTPResponse
INSTTESTS: >
PROCESS_EXECUTE_FAILED
VFS_WRITE
Expand Down
87 changes: 87 additions & 0 deletions tests/e2e-net-signatures/e2e-httprequest.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
package main

import (
"fmt"
"strings"

"github.com/aquasecurity/tracee/signatures/helpers"
"github.com/aquasecurity/tracee/types/detect"
"github.com/aquasecurity/tracee/types/protocol"
"github.com/aquasecurity/tracee/types/trace"
)

//
// HOWTO: The way to trigger this test signature is to execute:
//
// curl google.com
//
// This will cause it trigger once and reset it status.

type e2eHTTPRequest struct {
cb detect.SignatureHandler
}

func (sig *e2eHTTPRequest) Init(ctx detect.SignatureContext) error {
sig.cb = ctx.Callback
return nil
}

func (sig *e2eHTTPRequest) GetMetadata() (detect.SignatureMetadata, error) {
return detect.SignatureMetadata{
ID: "HTTPRequest",
EventName: "HTTPRequest",
Version: "0.1.0",
Name: "Network HTTP Request Test",
Description: "Network E2E Tests: HTTP Request",
Tags: []string{"e2e", "network"},
}, nil
}

func (sig *e2eHTTPRequest) GetSelectedEvents() ([]detect.SignatureEventSelector, error) {
return []detect.SignatureEventSelector{
{Source: "tracee", Name: "net_packet_http_request"},
}, nil
}

func (sig *e2eHTTPRequest) OnEvent(event protocol.Event) error {
eventObj, ok := event.Payload.(trace.Event)
if !ok {
return fmt.Errorf("failed to cast event's payload")
}

if eventObj.ProcessName != "curl" {
return nil
}

if eventObj.EventName == "net_packet_http_request" {
// validate tast context
if eventObj.HostName == "" {
return nil
}

// method 2 (with helper)
httpRequest, err := helpers.GetProtoHTTPRequestByName(eventObj, "http_request")
if err != nil {
return err
}

if !strings.HasPrefix(httpRequest.Protocol, "HTTP/") {
return nil
}

m, _ := sig.GetMetadata()
sig.cb(&detect.Finding{
SigMetadata: m,
Event: event,
Data: map[string]interface{}{},
})
}

return nil
}

func (sig *e2eHTTPRequest) OnSignal(s detect.Signal) error {
return nil
}

func (sig *e2eHTTPRequest) Close() {}
83 changes: 83 additions & 0 deletions tests/e2e-net-signatures/e2e-httpresponse.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
package main

import (
"fmt"
"strings"

"github.com/aquasecurity/tracee/signatures/helpers"
"github.com/aquasecurity/tracee/types/detect"
"github.com/aquasecurity/tracee/types/protocol"
"github.com/aquasecurity/tracee/types/trace"
)

//
// HOWTO: The way to trigger this test signature is to execute:
//
// curl google.com
//
// This will cause it trigger once and reset it status.

type e2eHTTPResponse struct {
cb detect.SignatureHandler
}

func (sig *e2eHTTPResponse) Init(ctx detect.SignatureContext) error {
sig.cb = ctx.Callback
return nil
}

func (sig *e2eHTTPResponse) GetMetadata() (detect.SignatureMetadata, error) {
return detect.SignatureMetadata{
ID: "HTTPResponse",
EventName: "HTTPResponse",
Version: "0.1.0",
Name: "Network HTTP Response Test",
Description: "Network E2E Tests: HTTP Response",
Tags: []string{"e2e", "network"},
}, nil
}

func (sig *e2eHTTPResponse) GetSelectedEvents() ([]detect.SignatureEventSelector, error) {
return []detect.SignatureEventSelector{
{Source: "tracee", Name: "net_packet_http_response"},
}, nil
}

func (sig *e2eHTTPResponse) OnEvent(event protocol.Event) error {
eventObj, ok := event.Payload.(trace.Event)
if !ok {
return fmt.Errorf("failed to cast event's payload")
}

if eventObj.EventName == "net_packet_http_response" {
// validate tast context
if eventObj.HostName == "" {
return nil
}

// method 2 (with helper)
httpResponse, err := helpers.GetProtoHTTPResponseByName(eventObj, "http_response")
if err != nil {
return err
}

if !strings.HasPrefix(httpResponse.Protocol, "HTTP/") {
return nil
}

m, _ := sig.GetMetadata()
sig.cb(&detect.Finding{
SigMetadata: m,
Event: event,
Data: map[string]interface{}{},
})
}

return nil
}

func (sig *e2eHTTPResponse) OnSignal(s detect.Signal) error {
return nil
}

func (sig *e2eHTTPResponse) Close() {}
2 changes: 2 additions & 0 deletions tests/e2e-net-signatures/export.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ var ExportedSignatures = []detect.Signature{
&e2eICMPv6{},
&e2eDNS{},
&e2eHTTP{},
&e2eHTTPRequest{},
&e2eHTTPResponse{},
}

var ExportedDataSources = []detect.DataSource{
Expand Down
13 changes: 13 additions & 0 deletions tests/e2e-net-signatures/scripts/httprequest.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#!/bin/bash

HOST="google.com"

exit_err() {
echo -n "ERROR: "
echo $@
exit 1
}

command -v curl > /dev/null || exit_err "missing curl tool"

curl $HOST
13 changes: 13 additions & 0 deletions tests/e2e-net-signatures/scripts/httpresponse.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#!/bin/bash

HOST="google.com"

exit_err() {
echo -n "ERROR: "
echo $@
exit 1
}

command -v curl > /dev/null || exit_err "missing curl tool"

curl $HOST

0 comments on commit 69f0bce

Please sign in to comment.