X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=src%2Fpkt_test.go;h=37cb637b9dfc2aeb9ec8e3be344d80a100a01f95;hb=0367cce2741e1ce6a89a49fd5c4e9df6005c9744;hp=c69ba96e3b951b1ed1630799b3664a052c71c83e;hpb=2ac16acad8de20005793cbadd61068d38dc3b0ca;p=nncp.git diff --git a/src/pkt_test.go b/src/pkt_test.go index c69ba96..37cb637 100644 --- a/src/pkt_test.go +++ b/src/pkt_test.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2019 Sergey Matveev +Copyright (C) 2016-2022 Sergey Matveev This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -19,6 +19,8 @@ package nncp import ( "bytes" + "crypto/rand" + "io" "testing" "testing/quick" @@ -34,24 +36,37 @@ func TestPktEncWrite(t *testing.T) { if err != nil { panic(err) } - f := func(path string, pathSize uint8, data [1 << 16]byte, size, padSize uint16) bool { - dataR := bytes.NewReader(data[:]) + f := func( + path string, + pathSize uint8, + dataSize uint32, + size, minSize uint16, + wrappers uint8, + ) bool { + dataSize %= 1 << 20 + data := make([]byte, dataSize) + if _, err = io.ReadFull(rand.Reader, data); err != nil { + panic(err) + } var ct bytes.Buffer if len(path) > int(pathSize) { path = path[:int(pathSize)] } - pkt, err := NewPkt(PktTypeFile, 123, []byte(path)) + nice := uint8(123) + pkt, err := NewPkt(PktTypeFile, nice, []byte(path)) if err != nil { panic(err) } - err = PktEncWrite( + wrappers %= 8 + _, _, err = PktEncWrite( nodeOur, nodeTheir.Their(), pkt, - 123, - int64(size), - int64(padSize), - dataR, + nice, + int64(minSize), + MaxFileSize, + int(wrappers), + bytes.NewReader(data), &ct, ) if err != nil { @@ -83,48 +98,55 @@ func TestPktEncRead(t *testing.T) { f := func( path string, pathSize uint8, - data [1 << 16]byte, - size, padSize uint16, - junk []byte) bool { - dataR := bytes.NewReader(data[:]) + dataSize uint32, + minSize uint16, + wrappers uint8, + ) bool { + dataSize %= 1 << 20 + data := make([]byte, dataSize) + if _, err = io.ReadFull(rand.Reader, data); err != nil { + panic(err) + } var ct bytes.Buffer if len(path) > int(pathSize) { path = path[:int(pathSize)] } - pkt, err := NewPkt(PktTypeFile, 123, []byte(path)) + nice := uint8(123) + pkt, err := NewPkt(PktTypeFile, nice, []byte(path)) if err != nil { panic(err) } - err = PktEncWrite( + wrappers %= 8 + _, _, err = PktEncWrite( node1, node2.Their(), pkt, - 123, - int64(size), - int64(padSize), - dataR, + nice, + int64(minSize), + MaxFileSize, + int(wrappers), + bytes.NewReader(data), &ct, ) if err != nil { return false } - ct.Write(junk) var pt bytes.Buffer nodes := make(map[NodeId]*Node) nodes[*node1.Id] = node1.Their() - node, sizeGot, err := PktEncRead(node2, nodes, &ct, &pt) + _, node, sizeGot, err := PktEncRead(node2, nodes, &ct, &pt, true, nil) if err != nil { return false } if *node.Id != *node1.Id { return false } - if sizeGot != sizeWithTags(PktOverhead+int64(size)) { + if sizeGot != int64(len(data)+int(PktOverhead)) { return false } var pktBuf bytes.Buffer xdr.Marshal(&pktBuf, &pkt) - return bytes.Compare(pt.Bytes(), append(pktBuf.Bytes(), data[:int(size)]...)) == 0 + return bytes.Compare(pt.Bytes(), append(pktBuf.Bytes(), data...)) == 0 } if err := quick.Check(f, nil); err != nil { t.Error(err)