Files
projectdiscovery-httpx/runner/runner_test.go
T
Dogan Can Bakir 2f16a472f5 filter out near duplicate responses (#1951)
* filter out near duplicate responses

* use ACR cache

* lint + msg

* skip asn

* optional asn

* more opt

* Update runner.go

---------

Co-authored-by: mzack <marco.rivoli.nvh@gmail.com>
Co-authored-by: Sandeep Singh <sandeep@projectdiscovery.io>
Co-authored-by: sandeep <8293321+ehsandeep@users.noreply.github.com>
2024-10-21 03:29:20 +05:30

184 lines
4.8 KiB
Go

package runner
import (
"os"
"strings"
"testing"
_ "github.com/projectdiscovery/fdmax/autofdmax"
"github.com/projectdiscovery/httpx/common/httpx"
"github.com/projectdiscovery/mapcidr/asn"
stringsutil "github.com/projectdiscovery/utils/strings"
"github.com/stretchr/testify/require"
)
func TestRunner_domain_targets(t *testing.T) {
options := &Options{}
r, err := New(options)
require.Nil(t, err, "could not create httpx runner")
input := []string{"example.com", "*.example.com", "example.com,one.one.one.one"}
expected := []httpx.Target{{
Host: "example.com",
}, {
Host: "example.com",
}, {
Host: "one.one.one.one",
CustomHost: "example.com",
}}
got := []httpx.Target{}
for _, inp := range input {
for target := range r.targets(r.hp, inp) {
got = append(got, target)
}
}
require.ElementsMatch(t, expected, got, "could not exepcted output")
}
func TestRunner_probeall_targets(t *testing.T) {
options := &Options{
ProbeAllIPS: true,
}
r, err := New(options)
require.Nil(t, err, "could not create httpx runner")
input := "one.one.one.one"
expected := []httpx.Target{{
Host: "one.one.one.one",
CustomIP: "2606:4700:4700::1111",
},
{
Host: "one.one.one.one",
CustomIP: "2606:4700:4700::1001",
},
{
Host: "one.one.one.one",
CustomIP: "1.0.0.1",
},
{
Host: "one.one.one.one",
CustomIP: "1.1.1.1",
}}
got := []httpx.Target{}
for target := range r.targets(r.hp, input) {
got = append(got, target)
}
require.ElementsMatch(t, expected, got, "could not exepcted output")
}
func TestRunner_cidr_targets(t *testing.T) {
options := &Options{}
r, err := New(options)
require.Nil(t, err, "could not create httpx runner")
input := "173.0.84.0/30"
expected := []httpx.Target{
{
Host: "173.0.84.0",
}, {
Host: "173.0.84.1",
},
{
Host: "173.0.84.2",
},
{
Host: "173.0.84.3",
}}
got := []httpx.Target{}
for target := range r.targets(r.hp, input) {
got = append(got, target)
}
require.ElementsMatch(t, expected, got, "could not exepcted output")
}
func TestRunner_asn_targets(t *testing.T) {
if os.Getenv("PDCP_API_KEY") == "" {
return
}
options := &Options{}
r, err := New(options)
require.Nil(t, err, "could not create httpx runner")
input := "AS14421"
expected := []httpx.Target{}
expectedOutputFile := "tests/AS14421.txt"
// read the expected IPs from the file
fileContent, err := os.ReadFile(expectedOutputFile)
require.Nil(t, err, "could not read the expectedOutputFile file")
ips := strings.Split(strings.ReplaceAll(string(fileContent), "\r\n", "\n"), "\n")
for _, ip := range ips {
expected = append(expected, httpx.Target{Host: ip})
}
if _, err := asn.GetIPAddressesAsStream(input); err != nil && stringsutil.ContainsAnyI(err.Error(), "unauthorized: 401") {
t.Skip("skipping asn test due to missing/invalid api key")
return
}
got := []httpx.Target{}
for target := range r.targets(r.hp, input) {
got = append(got, target)
}
require.ElementsMatch(t, expected, got, "could not get expected output")
}
func TestRunner_countTargetFromRawTarget(t *testing.T) {
options := &Options{}
r, err := New(options)
require.Nil(t, err, "could not create httpx runner")
input := "example.com"
expected := 1
got, err := r.countTargetFromRawTarget(input)
require.Nil(t, err, "could not count targets")
require.Equal(t, expected, got, "got wrong output")
input = "example.com"
expected = 0
err = r.hm.Set(input, nil)
require.Nil(t, err, "could not set value to hm")
got, err = r.countTargetFromRawTarget(input)
require.Nil(t, err, "could not count targets")
require.Equal(t, expected, got, "got wrong output")
input = "173.0.84.0/24"
expected = 256
got, err = r.countTargetFromRawTarget(input)
require.Nil(t, err, "could not count targets")
require.Equal(t, expected, got, "got wrong output")
input = ""
expected = 0
got, err = r.countTargetFromRawTarget(input)
require.Nil(t, err, "could not count targets")
require.Equal(t, expected, got, "got wrong output")
if os.Getenv("PDCP_API_KEY") != "" {
input = "AS14421"
expected = 256
got, err = r.countTargetFromRawTarget(input)
if err != nil && stringsutil.ContainsAnyI(err.Error(), "unauthorized: 401") {
t.Skip("skipping asn test due to missing/invalid api key")
return
}
require.Nil(t, err, "could not count targets")
require.Equal(t, expected, got, "got wrong output")
}
}
func TestRunner_urlWithComma_targets(t *testing.T) {
options := &Options{}
r, err := New(options)
require.Nil(t, err, "could not create httpx runner")
input := []string{"http://scanme.sh?a=1,2"}
expected := []httpx.Target{{
Host: "http://scanme.sh?a=1,2",
}}
got := []httpx.Target{}
for _, inp := range input {
for target := range r.targets(r.hp, inp) {
got = append(got, target)
}
}
require.ElementsMatch(t, expected, got, "could not exepcted output")
}