SynAck/internal/services/workers/Worker_test.go
2022-04-13 20:45:14 +03:00

87 lines
1.9 KiB
Go

package workers
import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
"testing"
)
type DialerStub struct {
mock.Mock
}
type DeliveryStub struct {
}
type ProducerStub struct {
psChan chan int
}
func (ps ProducerStub) WritePsToChan(psChan chan int) {
for i := 1; i <= cap(psChan); i++ {
psChan <- i
}
close(psChan)
}
func (ps ProducerStub) GetCountPorts() int {
return 5
}
func (ds DeliveryStub) GetTcpNetwork() string {
return "tcp"
}
func (d *DialerStub) DialPort(network, addr string, p int) int {
args := d.Called(network, addr, p)
return args.Int(0)
}
func TestScanPorts(t *testing.T) {
addr := "scanme.nmap.org"
grt := 5
delivery := DeliveryStub{}
dialer := &DialerStub{}
dialer.On("DialPort", delivery.GetTcpNetwork(), addr, mock.Anything).Once().Return(1)
dialer.On("DialPort", delivery.GetTcpNetwork(), addr, mock.Anything).Once().Return(2)
dialer.On("DialPort", delivery.GetTcpNetwork(), addr, mock.Anything).Once().Return(3)
dialer.On("DialPort", delivery.GetTcpNetwork(), addr, mock.Anything).Once().Return(4)
dialer.On("DialPort", delivery.GetTcpNetwork(), addr, mock.Anything).Once().Return(5)
producer := ProducerStub{}
psChan := make(chan int, producer.GetCountPorts())
w := Worker{Decorator: dialer, Delivery: delivery, Producer: &producer}
producer.WritePsToChan(psChan)
result := w.ScanPorts(addr, grt)
exp := []int{1, 2, 3, 4, 5}
for _, act := range result {
assert.Contains(t, exp, act)
}
}
func TestScanPortsWhenEmpty(t *testing.T) {
addr := "scanme.nmap.org"
grt := 5
producer := ProducerStub{}
cntPs := producer.GetCountPorts()
delivery := DeliveryStub{}
dialer := &DialerStub{}
dialer.On("DialPort", delivery.GetTcpNetwork(), addr, mock.Anything).Times(cntPs).Return(0)
psChan := make(chan int, cntPs)
w := Worker{Decorator: dialer, Delivery: delivery, Producer: &producer}
producer.WritePsToChan(psChan)
result := w.ScanPorts(addr, grt)
assert.Empty(t, result)
}