X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=src%2Fpkt_test.go;h=4f5919080cf0c296950c61b62291f4e2d57636a9;hb=b47dbfe6687569650fa544a4ecf3e4ea388390cb;hp=d076b63587d774c50e6906a447aeca7d53bee3ea;hpb=271870ad4f56253e0918f673b90615e4749cf201;p=nncp.git diff --git a/src/pkt_test.go b/src/pkt_test.go index d076b63..4f59190 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-2020 Sergey Matveev +Copyright (C) 2016-2021 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)