diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..5486410 --- /dev/null +++ b/.drone.yml @@ -0,0 +1,24 @@ +kind: pipeline +type: docker +name: default + +steps: + - name: install + image: golang:1.15 + volumes: + - name: cache + path: /go + commands: + - go test -i server/... + + - name: test + image: golang:1.15 + volumes: + - name: cache + path: /go + commands: + - go test server/... + +volumes: + - name: cache + temp: {} diff --git a/tcp/flow.go b/tcp/flow.go index 79c876e..c122cca 100644 --- a/tcp/flow.go +++ b/tcp/flow.go @@ -3,6 +3,7 @@ package tcp import ( "encoding/binary" "errors" + "fmt" "io" "mpbl3p/proxy" "net" @@ -92,6 +93,7 @@ func (f *Flow) produceMarshalled() ([]byte, error) { if n, err := io.LimitReader(f.conn, 4).Read(lengthBytes); err != nil { return nil, err } else if n != 4 { + fmt.Println(n) return nil, ErrNotEnoughBytes } diff --git a/tcp/flow_test.go b/tcp/flow_test.go index 08c9e7f..d5f2b4b 100644 --- a/tcp/flow_test.go +++ b/tcp/flow_test.go @@ -2,6 +2,7 @@ package tcp import ( "encoding/binary" + "fmt" "github.com/go-playground/assert/v2" "github.com/stretchr/testify/require" "mpbl3p/mocks" @@ -9,14 +10,12 @@ import ( "testing" ) - - func TestFlow_Consume(t *testing.T) { testContent := []byte("A test string is the content of this packet.") testPacket := proxy.NewPacket(testContent) testMac := mocks.AlmostUselessMac{} - t.Run("Output", func(t *testing.T) { + t.Run("Length", func(t *testing.T) { testConn := mocks.NewMockPerfectBiConn(100) flowA := Flow{conn: testConn.SideA()} @@ -28,7 +27,30 @@ func TestFlow_Consume(t *testing.T) { n, err := testConn.SideB().Read(buf) require.Nil(t, err) - assert.Equal(t, len(testContent) + 8 + 4 + 4, n) - assert.Equal(t, uint32(len(testContent) + 8 + 4), binary.LittleEndian.Uint32(buf[:len(buf)-4])) + assert.Equal(t, len(testContent)+8+4+4, n) + assert.Equal(t, uint32(len(testContent)+8+4), binary.LittleEndian.Uint32(buf[:len(buf)-4])) + }) +} + +func TestFlow_Produce(t *testing.T) { + testContent := "A test string is the content of this packet." + testMarshalled := []byte("0000" + testContent + "00000000abcd") + binary.LittleEndian.PutUint32(testMarshalled, uint32(len(testMarshalled)-4)) + + fmt.Println(testMarshalled) + + testMac := mocks.AlmostUselessMac{} + + t.Run("Length", func(t *testing.T) { + testConn := mocks.NewMockPerfectBiConn(100) + + flowA := Flow{conn: testConn.SideA()} + + _, err := testConn.SideB().Write(testMarshalled) + require.Nil(t, err) + + p, err := flowA.Produce(testMac) + require.Nil(t, err) + assert.Equal(t, testContent, string(p.Raw())) }) }