]> Cypherpunks.ru repositories - nncp.git/blobdiff - src/cypherpunks.ru/nncp/toss_test.go
Forbid any later GNU GPL versions autousage
[nncp.git] / src / cypherpunks.ru / nncp / toss_test.go
index 001a25b5618191230e322f8f85ec6b4795ec929a..48149c49f2d807fec138143d5be6f325206aba30 100644 (file)
@@ -1,11 +1,10 @@
 /*
 NNCP -- Node to Node copy, utilities for store-and-forward data exchange
-Copyright (C) 2016-2017 Sergey Matveev <stargrave@stargrave.org>
+Copyright (C) 2016-2019 Sergey Matveev <stargrave@stargrave.org>
 
 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
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
+the Free Software Foundation, version 3 of the License.
 
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -51,8 +50,9 @@ func dirFiles(path string) []string {
        return names
 }
 
-func TestTossEmail(t *testing.T) {
-       f := func(recipients [16]uint8) bool {
+func TestTossExec(t *testing.T) {
+       f := func(replyNice uint8, handleRaw uint32, recipients [16]uint8) bool {
+               handle := strconv.Itoa(int(handleRaw))
                for i, recipient := range recipients {
                        recipients[i] = recipient % 8
                }
@@ -63,11 +63,13 @@ func TestTossEmail(t *testing.T) {
                defer os.RemoveAll(spool)
                nodeOur, err := NewNodeGenerate()
                if err != nil {
-                       panic(err)
+                       t.Error(err)
+                       return false
                }
                ctx := Ctx{
                        Spool:   spool,
                        Self:    nodeOur,
+                       SelfId:  nodeOur.Id,
                        Neigh:   make(map[NodeId]*Node),
                        Alias:   make(map[string]*NodeId),
                        LogPath: filepath.Join(spool, "log.log"),
@@ -81,19 +83,24 @@ func TestTossEmail(t *testing.T) {
                        }
                        our, err := NewNodeGenerate()
                        if err != nil {
-                               panic(err)
+                               t.Error(err)
+                               return false
                        }
                        privates[recipient] = our
                        ctx.Neigh[*our.Id] = our.Their()
                }
                for _, recipient := range recipients {
-                       if err := ctx.TxMail(
+                       if err := ctx.TxExec(
                                ctx.Neigh[*privates[recipient].Id],
-                               DefaultNiceMail,
-                               "recipient",
-                               []byte{123},
+                               DefaultNiceExec,
+                               replyNice,
+                               handle,
+                               []string{"arg0", "arg1"},
+                               []byte("BODY\n"),
+                               1<<15,
                        ); err != nil {
-                               panic(err)
+                               t.Error(err)
+                               return false
                        }
                }
                for _, recipient := range recipients {
@@ -103,20 +110,25 @@ func TestTossEmail(t *testing.T) {
                        if len(dirFiles(rxPath)) == 0 {
                                continue
                        }
-                       ctx.Toss(ctx.Self.Id, DefaultNiceMail-1)
+                       ctx.Toss(ctx.Self.Id, DefaultNiceExec-1, false, false, false, false, false, false)
                        if len(dirFiles(rxPath)) == 0 {
                                return false
                        }
-                       ctx.Neigh[*nodeOur.Id].Sendmail = []string{"/bin/sh", "-c", "false"}
-                       ctx.Toss(ctx.Self.Id, DefaultNiceMail)
+                       ctx.Neigh[*nodeOur.Id].Exec = make(map[string][]string)
+                       ctx.Neigh[*nodeOur.Id].Exec[handle] = []string{"/bin/sh", "-c", "false"}
+                       ctx.Toss(ctx.Self.Id, DefaultNiceExec, false, false, false, false, false, false)
                        if len(dirFiles(rxPath)) == 0 {
                                return false
                        }
-                       ctx.Neigh[*nodeOur.Id].Sendmail = []string{
+                       ctx.Neigh[*nodeOur.Id].Exec[handle] = []string{
                                "/bin/sh", "-c",
-                               fmt.Sprintf("cat >> %s", filepath.Join(spool, "mbox")),
+                               fmt.Sprintf(
+                                       "echo $NNCP_NICE $0 $1 >> %s ; cat >> %s",
+                                       filepath.Join(spool, "mbox"),
+                                       filepath.Join(spool, "mbox"),
+                               ),
                        }
-                       ctx.Toss(ctx.Self.Id, DefaultNiceMail)
+                       ctx.Toss(ctx.Self.Id, DefaultNiceExec, false, false, false, false, false, false)
                        if len(dirFiles(rxPath)) != 0 {
                                return false
                        }
@@ -127,7 +139,11 @@ func TestTossEmail(t *testing.T) {
                }
                expected := make([]byte, 0, 16)
                for i := 0; i < 16; i++ {
-                       expected = append(expected, 123)
+                       expected = append(
+                               expected,
+                               []byte(fmt.Sprintf("%d arg0 arg1\n", replyNice))...,
+                       )
+                       expected = append(expected, []byte("BODY\n")...)
                }
                return bytes.Compare(mbox, expected) == 0
        }
@@ -156,11 +172,13 @@ func TestTossFile(t *testing.T) {
                defer os.RemoveAll(spool)
                nodeOur, err := NewNodeGenerate()
                if err != nil {
-                       panic(err)
+                       t.Error(err)
+                       return false
                }
                ctx := Ctx{
                        Spool:   spool,
                        Self:    nodeOur,
+                       SelfId:  nodeOur.Id,
                        Neigh:   make(map[NodeId]*Node),
                        Alias:   make(map[string]*NodeId),
                        LogPath: filepath.Join(spool, "log.log"),
@@ -180,18 +198,20 @@ func TestTossFile(t *testing.T) {
                                DefaultNiceFile,
                                src,
                                fileName,
+                               1<<15,
                        ); err != nil {
-                               panic(err)
+                               t.Error(err)
+                               return false
                        }
                }
                rxPath := filepath.Join(spool, ctx.Self.Id.String(), string(TRx))
                os.Rename(filepath.Join(spool, ctx.Self.Id.String(), string(TTx)), rxPath)
-               ctx.Toss(ctx.Self.Id, DefaultNiceFile)
+               ctx.Toss(ctx.Self.Id, DefaultNiceFile, false, false, false, false, false, false)
                if len(dirFiles(rxPath)) == 0 {
                        return false
                }
                ctx.Neigh[*nodeOur.Id].Incoming = &incomingPath
-               ctx.Toss(ctx.Self.Id, DefaultNiceFile)
+               ctx.Toss(ctx.Self.Id, DefaultNiceFile, false, false, false, false, false, false)
                if len(dirFiles(rxPath)) != 0 {
                        return false
                }
@@ -223,11 +243,13 @@ func TestTossFileSameName(t *testing.T) {
                defer os.RemoveAll(spool)
                nodeOur, err := NewNodeGenerate()
                if err != nil {
-                       panic(err)
+                       t.Error(err)
+                       return false
                }
                ctx := Ctx{
                        Spool:   spool,
                        Self:    nodeOur,
+                       SelfId:  nodeOur.Id,
                        Neigh:   make(map[NodeId]*Node),
                        Alias:   make(map[string]*NodeId),
                        LogPath: filepath.Join(spool, "log.log"),
@@ -240,7 +262,8 @@ func TestTossFileSameName(t *testing.T) {
                        []byte("doesnotmatter"),
                        os.FileMode(0600),
                ); err != nil {
-                       panic(err)
+                       t.Error(err)
+                       return false
                }
                incomingPath := filepath.Join(spool, "incoming")
                for i := 0; i < files; i++ {
@@ -249,14 +272,16 @@ func TestTossFileSameName(t *testing.T) {
                                DefaultNiceFile,
                                srcPath,
                                "samefile",
+                               1<<15,
                        ); err != nil {
-                               panic(err)
+                               t.Error(err)
+                               return false
                        }
                }
                rxPath := filepath.Join(spool, ctx.Self.Id.String(), string(TRx))
                os.Rename(filepath.Join(spool, ctx.Self.Id.String(), string(TTx)), rxPath)
                ctx.Neigh[*nodeOur.Id].Incoming = &incomingPath
-               ctx.Toss(ctx.Self.Id, DefaultNiceFile)
+               ctx.Toss(ctx.Self.Id, DefaultNiceFile, false, false, false, false, false, false)
                expected := make(map[string]struct{})
                expected["samefile"] = struct{}{}
                for i := 0; i < files-1; i++ {
@@ -279,7 +304,7 @@ func TestTossFileSameName(t *testing.T) {
 }
 
 func TestTossFreq(t *testing.T) {
-       f := func(fileSizes []uint8) bool {
+       f := func(fileSizes []uint8, replyNice uint8) bool {
                if len(fileSizes) == 0 {
                        return true
                }
@@ -290,11 +315,13 @@ func TestTossFreq(t *testing.T) {
                defer os.RemoveAll(spool)
                nodeOur, err := NewNodeGenerate()
                if err != nil {
-                       panic(err)
+                       t.Error(err)
+                       return false
                }
                ctx := Ctx{
                        Spool:   spool,
                        Self:    nodeOur,
+                       SelfId:  nodeOur.Id,
                        Neigh:   make(map[NodeId]*Node),
                        Alias:   make(map[string]*NodeId),
                        LogPath: filepath.Join(spool, "log.log"),
@@ -312,22 +339,25 @@ func TestTossFreq(t *testing.T) {
                        if err := ctx.TxFreq(
                                ctx.Neigh[*nodeOur.Id],
                                DefaultNiceFreq,
+                               replyNice,
                                fileName,
                                fileName,
+                               1<<15,
                        ); err != nil {
-                               panic(err)
+                               t.Error(err)
+                               return false
                        }
                }
                rxPath := filepath.Join(spool, ctx.Self.Id.String(), string(TRx))
                txPath := filepath.Join(spool, ctx.Self.Id.String(), string(TTx))
                os.Rename(txPath, rxPath)
                os.MkdirAll(txPath, os.FileMode(0700))
-               ctx.Toss(ctx.Self.Id, DefaultNiceFreq)
+               ctx.Toss(ctx.Self.Id, DefaultNiceFreq, false, false, false, false, false, false)
                if len(dirFiles(txPath)) != 0 || len(dirFiles(rxPath)) == 0 {
                        return false
                }
                ctx.Neigh[*nodeOur.Id].Freq = &spool
-               ctx.Toss(ctx.Self.Id, DefaultNiceFreq)
+               ctx.Toss(ctx.Self.Id, DefaultNiceFreq, false, false, false, false, false, false)
                if len(dirFiles(txPath)) != 0 || len(dirFiles(rxPath)) == 0 {
                        return false
                }
@@ -340,19 +370,24 @@ func TestTossFreq(t *testing.T) {
                                panic(err)
                        }
                }
-               ctx.Toss(ctx.Self.Id, DefaultNiceFreq)
+               ctx.Toss(ctx.Self.Id, DefaultNiceFreq, false, false, false, false, false, false)
                if len(dirFiles(txPath)) == 0 || len(dirFiles(rxPath)) != 0 {
                        return false
                }
                for job := range ctx.Jobs(ctx.Self.Id, TTx) {
                        var buf bytes.Buffer
-                       _, err := PktEncRead(ctx.Self, ctx.Neigh, job.Fd, &buf)
+                       _, _, err := PktEncRead(ctx.Self, ctx.Neigh, job.Fd, &buf)
                        if err != nil {
-                               panic(err)
+                               t.Error(err)
+                               return false
                        }
                        var pkt Pkt
                        if _, err = xdr.Unmarshal(&buf, &pkt); err != nil {
-                               panic(err)
+                               t.Error(err)
+                               return false
+                       }
+                       if pkt.Nice != replyNice {
+                               return false
                        }
                        dst := string(pkt.Path[:int(pkt.PathLen)])
                        if bytes.Compare(buf.Bytes(), files[dst]) != 0 {
@@ -387,11 +422,13 @@ func TestTossTrns(t *testing.T) {
                defer os.RemoveAll(spool)
                nodeOur, err := NewNodeGenerate()
                if err != nil {
-                       panic(err)
+                       t.Error(err)
+                       return false
                }
                ctx := Ctx{
                        Spool:   spool,
                        Self:    nodeOur,
+                       SelfId:  nodeOur.Id,
                        Neigh:   make(map[NodeId]*Node),
                        Alias:   make(map[string]*NodeId),
                        LogPath: filepath.Join(spool, "log.log"),
@@ -404,7 +441,7 @@ func TestTossTrns(t *testing.T) {
                os.MkdirAll(txPath, os.FileMode(0700))
                for _, data := range datum {
                        pktTrans := Pkt{
-                               Magic:   MagicNNCPPv1,
+                               Magic:   MagicNNCPPv2,
                                Type:    PktTypeTrns,
                                PathLen: blake2b.Size256,
                                Path:    new([MaxPathSize]byte),
@@ -417,10 +454,12 @@ func TestTossTrns(t *testing.T) {
                                &pktTrans,
                                123,
                                int64(len(data)),
+                               0,
                                bytes.NewReader(data),
                                &dst,
                        ); err != nil {
-                               panic(err)
+                               t.Error(err)
+                               return false
                        }
                        checksum := blake2b.Sum256(dst.Bytes())
                        if err := ioutil.WriteFile(
@@ -431,7 +470,7 @@ func TestTossTrns(t *testing.T) {
                                panic(err)
                        }
                }
-               ctx.Toss(ctx.Self.Id, 123)
+               ctx.Toss(ctx.Self.Id, 123, false, false, false, false, false, false)
                if len(dirFiles(rxPath)) != 0 {
                        return false
                }
@@ -443,7 +482,6 @@ func TestTossTrns(t *testing.T) {
                        for k, data := range datum {
                                if bytes.Compare(dataRead, data) == 0 {
                                        delete(datum, k)
-                                       break
                                }
                        }
                }