package responsehighlighter import ( "encoding/hex" "testing" "github.com/stretchr/testify/assert" "github.com/projectdiscovery/nuclei/v2/pkg/operators" ) const input = "abcdefghijklmnabcdefghijklmnabcdefghijklmnabcdefghijklmnabcdefghijklmnabcdefghijklmnabcdefghijklmnabcdefghijklmnabcdefghijklmn" func TestHexDumpHighlighting(t *testing.T) { const highlightedHexDumpResponse = `00000000 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 61 62 |abcdefghijklmnab| 00000010 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 61 62 63 64 |cdefghijklmnabcd| 00000020 65 66 67 68 69 6a 6b 6c 6d 6e 61 62 63 64 65 66 |efghijklmnabcdef| 00000030 67 68 69 6a 6b 6c 6d 6e 61 62 63 64 65 66 67 68 |ghijklmnabcdefgh| 00000040 69 6a 6b 6c 6d 6e 61 62 63 64 65 66 67 68 69 6a |ijklmnabcdefghij| 00000050 6b 6c 6d 6e 61 62 63 64 65 66 67 68 69 6a 6b 6c |klmnabcdefghijkl| 00000060 6d 6e 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e |mnabcdefghijklmn| 00000070 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e |abcdefghijklmn| ` t.Run("Test highlighting when the snippet is wrapped", func(t *testing.T) { result, err := toHighLightedHexDump(hex.Dump([]byte(input)), "defghij") assert.Nil(t, err) assert.Equal(t, highlightedHexDumpResponse, result.String()) }) t.Run("Test highlight when the snippet contains separator character", func(t *testing.T) { value := "asdfasdfasda|basdfadsdfs|" result, err := toHighLightedHexDump(hex.Dump([]byte(value)), "a|b") expected := `00000000 61 73 64 66 61 73 64 66 61 73 64 61 7c 62 61 73 |asdfasdfasda|bas| 00000010 64 66 61 64 73 64 66 73 7c |dfadsdfs|| ` assert.Nil(t, err) assert.Equal(t, expected, result.String()) }) } func TestHighlight(t *testing.T) { const multiSnippetHighlightHexDumpResponse = `00000000 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 61 62 |abcdefghijklmnab| 00000010 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 61 62 63 64 |cdefghijklmnabcd| 00000020 65 66 67 68 69 6a 6b 6c 6d 6e 61 62 63 64 65 66 |efghijklmnabcdef| 00000030 67 68 69 6a 6b 6c 6d 6e 61 62 63 64 65 66 67 68 |ghijklmnabcdefgh| 00000040 69 6a 6b 6c 6d 6e 61 62 63 64 65 66 67 68 69 6a |ijklmnabcdefghij| 00000050 6b 6c 6d 6e 61 62 63 64 65 66 67 68 69 6a 6b 6c |klmnabcdefghijkl| 00000060 6d 6e 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e |mnabcdefghijklmn| 00000070 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e |abcdefghijklmn| ` matches := map[string][]string{ "first": {"defghij"}, "second": {"ab"}, } operatorResult := operators.Result{Matches: matches} t.Run("Test highlighting when the snippet is wrapped", func(t *testing.T) { result := Highlight(&operatorResult, hex.Dump([]byte(input)), false, true) assert.Equal(t, multiSnippetHighlightHexDumpResponse, result) }) t.Run("Test highlighting without hexdump", func(t *testing.T) { result := Highlight(&operatorResult, input, false, false) expected := `abcdefghijklmnabcdefghijklmnabcdefghijklmnabcdefghijklmnabcdefghijklmnabcdefghijklmnabcdefghijklmnabcdefghijklmnabcdefghijklmn` assert.Equal(t, expected, result) }) t.Run("Test the response is not modified if noColor is true", func(t *testing.T) { result := Highlight(&operatorResult, input, true, false) assert.Equal(t, input, result) }) t.Run("Test the response is not modified if noColor is true", func(t *testing.T) { result := Highlight(&operatorResult, hex.Dump([]byte(input)), true, true) assert.Equal(t, hex.Dump([]byte(input)), result) }) }