Files
indra/pkg/engine/fail_test.go
2023-07-11 11:08:08 +01:00

780 lines
19 KiB
Go

///go:build failingtests
package engine
//func TestEngine_Message(t *testing.T) {
// if indra.CI == "false" {
// log2.SetLogLevel(log2.Info)
// }
// var clients []*Engine
// var e error
// const nCircuits = 10
// ctx, cancel := context.WithCancel(context.Background())
// if clients, e = CreateNMockCircuits(nCircuits, nCircuits,
// ctx); fails(e) {
// t.Error(e)
// t.FailNow()
// }
// client := clients[0]
// log.D.Ln("client", client.Mgr().GetLocalNodeAddressString())
// // Start up the clients.
// for _, v := range clients {
// go v.Start()
// }
// var wg sync.WaitGroup
// var counter atomic.Int32
// quit := qu.T()
// go func() {
// for {
// select {
// case <-time.After(time.Second * 5):
// quit.Q()
// t.Error("MakeHiddenService test failed")
// case <-quit:
// for i := 0; i < int(counter.Load()); i++ {
// wg.Done()
// }
// for _, v := range clients {
// v.Shutdown()
// }
// return
// }
// }
// }()
// for i := 0; i < nCircuits*nCircuits/2; i++ {
// wg.Add(1)
// counter.Inc()
// e = client.BuyNewSessions(1000000, func() {
// wg.Done()
// counter.Dec()
// })
// if fails(e) {
// wg.Done()
// counter.Dec()
// }
// wg.Wait()
// }
// var idPrv *crypto.Prv
// _ = idPrv
// if idPrv, e = crypto.GeneratePrvKey(); fails(e) {
// return
// }
// id := nonce.NewID()
// _ = id
// introducerHops := client.Mgr().GetSessionsAtHop(2)
// var introducer *sessions.Data
// returnHops := client.Mgr().GetSessionsAtHop(5)
// var returner *sessions.Data
// _ = returner
// if len(introducerHops) > 1 {
// cryptorand.Shuffle(len(introducerHops),
// func(i, j int) {
// introducerHops[i], introducerHops[j] =
// introducerHops[j], introducerHops[i]
// },
// )
// }
// introducer = introducerHops[0]
// if len(returnHops) > 1 {
// cryptorand.Shuffle(len(returnHops), func(i, j int) {
// returnHops[i], returnHops[j] = returnHops[j],
// returnHops[i]
// })
// }
// returner = returnHops[0]
// log.D.Ln("getting sessions for introducer...")
// for i := range clients {
// if introducer.Node.ID == clients[i].Mgr().GetLocalNode().ID {
// for j := 0; j < nCircuits; j++ {
// wg.Add(1)
// counter.Inc()
// e = clients[i].BuyNewSessions(1000000, func() {
// wg.Done()
// counter.Dec()
// })
// if fails(e) {
// wg.Done()
// counter.Dec()
// }
// }
// wg.Wait()
// break
// }
// }
// if indra.CI == "false" {
// log2.SetLogLevel(log2.Trace)
// }
// wg.Add(1)
// counter.Inc()
// svc := &services.Service{
// Port: 2345,
// RelayRate: 43523,
// Transport: transport.NewByteChan(64),
// }
// ini, _ := client.SendHiddenService(id, idPrv, 0, 0,
// time.Now().Add(time.Hour), returner, introducer, svc,
// func(id nonce.ID, ifc interface{}, b slice.Bytes) (e error) {
// log.I.F("hidden service %s successfully propagated", ifc)
// wg.Done()
// counter.Dec()
// return
// })
// wg.Wait()
// time.Sleep(time.Second)
// wg.Add(1)
// counter.Inc()
// var rd *ready.Ready
// client.SendRoute(ini.Key, ini.AddrPort,
// func(id nonce.ID, ifc interface{}, b slice.Bytes) (e error) {
// rd = ifc.(*ready.Ready)
// log.D.S("route pending", rd.Address, rd.Return)
// counter.Dec()
// wg.Done()
// return
// })
// wg.Wait()
// msg, _, _ := tests.GenMessage(256, "hidden service message test")
// wg.Add(1)
// counter.Inc()
// var ms *whisper.Message
// client.SendMessage(&whisper.Message{
// Address: rd.Address,
// ID: nonce.NewID(),
// Re: rd.ID,
// Forward: rd.Return,
// Return: MakeReplyHeader(client),
// Payload: msg,
// }, func(id nonce.ID, ifc interface{}, b slice.Bytes) (e error) {
// log.D.S("request success", id, ifc)
// ms = ifc.(*whisper.Message)
// counter.Dec()
// wg.Done()
// return
// })
// wg.Wait()
// wg.Add(1)
// counter.Inc()
// client.SendMessage(&whisper.Message{
// Address: ms.Address,
// ID: nonce.NewID(),
// Re: ms.ID,
// Forward: ms.Return,
// Return: MakeReplyHeader(client),
// Payload: msg,
// }, func(id nonce.ID, ifc interface{}, b slice.Bytes) (e error) {
// log.D.S("response success", id, ifc)
// counter.Dec()
// wg.Done()
// return
// })
// wg.Wait()
// time.Sleep(time.Second)
// quit.Q()
// cancel()
// log.W.Ln("fin")
//}
//func TestEngine_Route(t *testing.T) {
// if indra.CI == "false" {
// log2.SetLogLevel(log2.Debug)
// }
// runtime.GOMAXPROCS(1)
// var clients []*Engine
// var e error
// const nCircuits = 10
// ctx, cancel := context.WithCancel(context.Background())
// if clients, e = CreateNMockCircuits(nCircuits, nCircuits,
// ctx); fails(e) {
// t.Error(e)
// t.FailNow()
// }
// client := clients[0]
// log.W.Ln("client", client.Mgr().GetLocalNodeAddressString())
// // Start up the clients.
// for _, v := range clients {
// go v.Start()
// }
// var wg sync.WaitGroup
// var counter atomic.Int32
// quit := qu.T()
// go func() {
// for {
// select {
// case <-time.After(time.Second * 4):
// quit.Q()
// t.Error("Route test failed")
// case <-quit:
// for i := 0; i < int(counter.Load()); i++ {
// wg.Done()
// }
// for _, v := range clients {
// v.Shutdown()
// }
// return
// }
// }
// }()
// for i := 0; i < nCircuits*nCircuits/2; i++ {
// wg.Add(1)
// counter.Inc()
// e = client.BuyNewSessions(1000000, func() {
// wg.Done()
// counter.Dec()
// })
// if fails(e) {
// wg.Done()
// counter.Dec()
// }
// wg.Wait()
// }
// var idPrv *crypto.Prv
// _ = idPrv
// if idPrv, e = crypto.GeneratePrvKey(); fails(e) {
// return
// }
// id := nonce.NewID()
// _ = id
// introducerHops := client.Mgr().GetSessionsAtHop(2)
// var introducer *sessions.Data
// returnHops := client.Mgr().GetSessionsAtHop(5)
// var returner *sessions.Data
// _ = returner
// if len(introducerHops) > 1 {
// cryptorand.Shuffle(len(introducerHops),
// func(i, j int) {
// introducerHops[i], introducerHops[j] =
// introducerHops[j], introducerHops[i]
// },
// )
// }
// introducer = introducerHops[0]
// if len(returnHops) > 1 {
// cryptorand.Shuffle(len(returnHops), func(i, j int) {
// returnHops[i], returnHops[j] = returnHops[j],
// returnHops[i]
// })
// }
// returner = returnHops[0]
// const localPort = 25234
// log.D.Ln("getting sessions for introducer...")
// for i := range clients {
// if introducer.Node.ID == clients[i].Mgr().GetLocalNode().ID {
// for j := 0; j < nCircuits; j++ {
// wg.Add(1)
// counter.Inc()
// e = clients[i].BuyNewSessions(1000000, func() {
// wg.Done()
// counter.Dec()
// })
// if fails(e) {
// wg.Done()
// counter.Dec()
// }
// }
// wg.Wait()
// break
// }
// }
// wg.Add(1)
// counter.Inc()
// svc := &services.Service{
// Port: localPort,
// RelayRate: 43523,
// Transport: transport.NewByteChan(64),
// }
// ini, _ := client.SendHiddenService(id, idPrv, 0, 0,
// time.Now().Add(time.Hour),
// returner, introducer, svc,
// func(id nonce.ID, ifc interface{}, b slice.Bytes) (e error) {
// log.I.F("hidden service %s successfully propagated", ifc)
// wg.Done()
// counter.Dec()
// return
// })
// wg.Wait()
// time.Sleep(time.Second)
// if indra.CI == "false" {
// log2.SetLogLevel(log2.Debug)
// }
// wg.Add(1)
// counter.Inc()
// log.D.Ln("intro", ini.ID, ini.AddrPort.String(), ini.Key.ToBased32Abbreviated(),
// ini.Expiry, ini.Validate())
// client.SendRoute(ini.Key, ini.AddrPort,
// func(id nonce.ID, ifc interface{}, b slice.Bytes) (e error) {
// log.I.S("success", id)
// counter.Dec()
// wg.Done()
// return
// })
// wg.Wait()
// quit.Q()
// cancel()
// log.W.Ln("fin")
//}
//func TestEngine_SendHiddenService(t *testing.T) {
// if indra.CI == "false" {
// log2.SetLogLevel(log2.Debug)
// }
// var clients []*Engine
// var e error
// const nCircuits = 10
// ctx, cancel := context.WithCancel(context.Background())
// if clients, e = CreateNMockCircuits(nCircuits, nCircuits,
// ctx); fails(e) {
// t.Error(e)
// t.FailNow()
// }
// // Start up the clients.
// for _, v := range clients {
// go v.Start()
// }
// var wg sync.WaitGroup
// var counter atomic.Int32
// quit := qu.T()
// go func() {
// select {
// case <-time.After(time.Second * 6):
// quit.Q()
// t.Error("MakeHiddenService test failed")
// case <-quit:
// for _, v := range clients {
// v.Shutdown()
// }
// for i := 0; i < int(counter.Load()); i++ {
// wg.Done()
// }
// return
// }
// }()
// for i := 0; i < nCircuits*nCircuits/2; i++ {
// wg.Add(1)
// counter.Inc()
// e = clients[0].BuyNewSessions(1000000, func() {
// wg.Done()
// counter.Dec()
// })
// if fails(e) {
// wg.Done()
// counter.Dec()
// }
// wg.Wait()
// }
// if indra.CI == "false" {
// log2.SetLogLevel(log2.Debug)
// }
// var idPrv *crypto.Prv
// if idPrv, e = crypto.GeneratePrvKey(); fails(e) {
// return
// }
// id := nonce.NewID()
// introducerHops := clients[0].Mgr().GetSessionsAtHop(2)
// returnHops := clients[0].Mgr().GetSessionsAtHop(5)
// var introducer *sessions.Data
// if len(introducerHops) > 1 {
// cryptorand.Shuffle(len(introducerHops), func(i, j int) {
// introducerHops[i], introducerHops[j] = introducerHops[j],
// introducerHops[i]
// })
// }
// var returner *sessions.Data
// if len(introducerHops) > 1 {
// cryptorand.Shuffle(len(returnHops), func(i, j int) {
// returnHops[i], returnHops[j] = returnHops[j],
// returnHops[i]
// })
// }
// // There must be at least one, and if there was more than one the first
// // index of introducerHops will be a randomly selected one.
// introducer = introducerHops[0]
// returner = returnHops[0]
// //wg.Add(1)
// counter.Inc()
// svc := &services.Service{
// Port: 2345,
// RelayRate: 43523,
// Transport: transport.NewByteChan(64),
// }
// clients[0].SendHiddenService(id, idPrv, 0, 0,
// time.Now().Add(time.Hour), returner, introducer, svc,
// func(id nonce.ID, ifc interface{}, b slice.Bytes) (e error) {
// log.W.S("received intro", reflect.TypeOf(ifc), b.ToBytes())
// // This happens when the gossip gets back to us.
// //wg.Done()
// counter.Dec()
// return
// })
// //wg.Wait()
// time.Sleep(time.Second)
// quit.Q()
// cancel()
//}
//func TestDispatcher_Rekey(t *testing.T) {
// if indra.CI == "false" {
// log2.SetLogLevel(log2.Debug)
// }
// var e error
// var l1, l2 *transport.Listener
// _ = l2
// var k1, k2 *crypto.Keys
// ctx, cancel := context.WithCancel(context.Background())
// _ = cancel
// if k1, k2, e = crypto.Generate2Keys(); fails(e) {
// t.FailNow()
// }
// dataPath, err := os.MkdirTemp(os.TempDir(), "badger")
// if err != nil {
// t.FailNow()
// }
// l1, e = transport.NewListener("", transport.LocalhostZeroIPv4TCP,
// dataPath, k1, ctx, transport.DefaultMTU)
// if fails(e) {
// t.FailNow()
// }
// dataPath, err = os.MkdirTemp(os.TempDir(), "badger")
// if err != nil {
// t.FailNow()
// }
// l2, e = transport.NewListener(transport.GetHostAddress(l1.Host),
// transport.LocalhostZeroIPv4TCP, dataPath, k2, ctx, transport.DefaultMTU)
// if fails(e) {
// t.FailNow()
// }
// var msg1, msg2 []byte
// _ = msg2
// msg1, _, e = tests.GenMessage(4096, "REQUEST")
// msg2, _, e = tests.GenMessage(1024, "RESPONSE")
// _, _ = msg1, msg2
// hn1 := transport.GetHostAddress(l2.Host)
// // hn2 := transport.GetHostAddress(l1.Host)
// var ks *crypto.KeySet
// _, ks, e = crypto.NewSigner()
// d1 := dispatcher.NewDispatcher(l1.Dial(hn1), ctx, ks)
// d2 := dispatcher.NewDispatcher(<-l2.Accept(), ctx, ks)
// _, _ = d1, d2
// var msgp1, msgp2 slice.Bytes
// id1, id2 := nonce.NewID(), nonce.NewID()
// on1 := ont.Assemble(Skins{
// response.New(id1, 0, msg1, 0)})
// on2 := ont.Assemble(Skins{
// response.New(id2, 0, msg2, 0)})
// s1 := ont.Encode(on1)
// s2 := ont.Encode(on2)
// x1 := s1.GetAll()
// x2 := s2.GetAll()
// xx1 := &dispatcher.Onion{x1}
// xx2 := &dispatcher.Onion{x2}
// sp1 := splice.New(xx1.Len())
// sp2 := splice.New(xx2.Len())
// if e = xx1.Encode(sp1); fails(e) {
// t.FailNow()
// }
// if e = xx2.Encode(sp2); fails(e) {
// t.FailNow()
// }
// countTo, succ := 1000, 0
// go func() {
// for {
// select {
// case <-ctx.Done():
// return
// case b := <-d1.Duplex.Receive():
// bb, xb2 := b.ToBytes(), x2.ToBytes()
// if string(bb) != string(xb2) {
// t.Error("did not receive expected message")
// return
// } else {
// succ++
// continue
// }
// case b := <-d2.Duplex.Receive():
// bb, xb1 := b.ToBytes(), x1.ToBytes()
// if string(bb) != string(xb1) {
// t.Error("did not receive expected message")
// return
// } else {
// succ++
// continue
// }
// }
// }
// }()
// msgp1 = sp1.GetAll()
// msgp2 = sp2.GetAll()
// for i := 0; i < countTo; i++ {
// d1.SendToConn(msgp1)
// d2.SendToConn(msgp2)
// }
// time.Sleep(time.Second)
// cancel()
// if succ != countTo*3 {
// t.Fatal("did not receive all messages correctly", succ, countTo*3)
// }
//}
//func TestClient_SendExit(t *testing.T) {
// if indra.CI == "false" {
// log2.SetLogLevel(log2.Debug)
// }
// var clients []*Engine
// var e error
// ctx, cancel := context.WithCancel(context.Background())
// if clients, e = CreateNMockCircuitsWithSessions(2, 2,
// ctx); fails(e) {
// t.Error(e)
// t.FailNow()
// }
// client := clients[0]
// log.D.Ln("client", client.Mgr().GetLocalNodeAddressString())
// // set up forwarding port service
// const port = 3455
// sim := transport.NewByteChan(0)
// for i := range clients {
// e = clients[i].Mgr().AddServiceToLocalNode(&services.Service{
// Port: port,
// Transport: sim,
// RelayRate: 58000,
// })
// if fails(e) {
// t.Error(e)
// t.FailNow()
// }
// }
// // Start up the clients.
// for _, v := range clients {
// go v.Start()
// }
// quit := qu.T()
// var wg sync.WaitGroup
// go func() {
// select {
// case <-time.After(time.Second):
// case <-quit:
// return
// }
// quit.Q()
// t.Error("Exit test failed")
// }()
//out:
// for i := 3; i < len(clients[0].Mgr().Sessions)-1; i++ {
// wg.Add(1)
// var msg slice.Bytes
// if msg, _, e = tests.GenMessage(64, "request"); fails(e) {
// t.Error(e)
// t.FailNow()
// }
// var respMsg slice.Bytes
// var respHash sha256.Hash
// if respMsg, respHash, e = tests.GenMessage(32,
// "response"); fails(e) {
// t.Error(e)
// t.FailNow()
// }
// bob := clients[0].Mgr().Sessions[i]
// returnHops := client.Mgr().GetSessionsAtHop(5)
// var alice *sessions.Data
// if len(returnHops) > 1 {
// cryptorand.Shuffle(len(returnHops), func(i, j int) {
// returnHops[i], returnHops[j] = returnHops[j],
// returnHops[i]
// })
// }
// alice = returnHops[0] // c[bob.Hop] = clients[0].Sessions[i]
// id := nonce.NewID()
// client.SendExit(port, msg, id, bob, alice, func(idd nonce.ID,
// ifc interface{}, b slice.Bytes) (e error) {
// if sha256.Single(b) != respHash {
// t.Error("failed to receive expected message")
// }
// if id != idd {
// t.Error("failed to receive expected message Keys")
// }
// log.D.F("success\n\n")
// wg.Done()
// return
// })
// bb := <-clients[3].Mgr().GetLocalNode().ReceiveFrom(port)
// log.T.S(bb.ToBytes())
// if e = clients[3].Mgr().SendFromLocalNode(port, respMsg); fails(e) {
// t.Error("fail send")
// }
// log.T.Ln("response sent")
// select {
// case <-quit:
// break out
// default:
// }
// wg.Wait()
// }
// quit.Q()
// cancel()
// for _, v := range clients {
// v.Shutdown()
// }
//}
//func TestClient_SendPing(t *testing.T) {
// if indra.CI == "false" {
// log2.SetLogLevel(log2.Debug)
// }
// var clients []*Engine
// var e error
// ctx, cancel := context.WithCancel(context.Background())
// if clients, e = CreateNMockCircuitsWithSessions(1, 2,
// ctx); fails(e) {
// t.Error(e)
// t.FailNow()
// }
// // Start up the clients.
// for _, v := range clients {
// go v.Start()
// }
// quit := qu.T()
// var wg sync.WaitGroup
// go func() {
// select {
// case <-time.After(time.Second):
// case <-quit:
// return
// }
// quit.Q()
// t.Error("SendPing test failed")
// }()
//out:
// for i := 3; i < len(clients[0].Mgr().Sessions)-1; i++ {
// wg.Add(1)
// var c sessions.Circuit
// sess := clients[0].Mgr().Sessions[i]
// c[sess.Hop] = clients[0].Mgr().Sessions[i]
// clients[0].SendPing(c,
// func(id nonce.ID, ifc interface{}, b slice.Bytes) (e error) {
// log.D.Ln("success")
// wg.Done()
// return
// })
// select {
// case <-quit:
// break out
// default:
// }
// wg.Wait()
// }
// quit.Q()
// cancel()
// for _, v := range clients {
// v.Shutdown()
// }
//}
//func TestClient_SendSessionKeys(t *testing.T) {
// if indra.CI == "false" {
// log2.SetLogLevel(log2.Debug)
// }
// var clients []*Engine
// var e error
// ctx, cancel := context.WithCancel(context.Background())
// if clients, e = CreateNMockCircuits(2, 2, ctx); fails(e) {
// t.Error(e)
// t.FailNow()
// }
// // Start up the clients.
// for _, v := range clients {
// go v.Start()
// }
// var wg sync.WaitGroup
// var counter atomic.Int32
// quit := qu.T()
// go func() {
// select {
// case <-time.After(time.Second * 6):
// case <-quit:
// return
// }
// for i := 0; i < int(counter.Load()); i++ {
// wg.Done()
// }
// t.Error("SendSessionKeys test failed")
// quit.Q()
// }()
// for i := 0; i < 10; i++ {
// log.D.Ln("buying sessions", i)
// wg.Add(1)
// counter.Inc()
// e = clients[0].BuyNewSessions(1000000, func() {
// wg.Done()
// counter.Dec()
// })
// if fails(e) {
// wg.Done()
// counter.Dec()
// }
// wg.Wait()
// for j := range clients[0].Mgr().CircuitCache {
// log.D.F("%d %s %v", i, j, clients[0].Mgr().CircuitCache[j])
// }
// quit.Q()
// }
// for _, v := range clients {
// v.Shutdown()
// }
// cancel()
//}
//func TestClient_SendGetBalance(t *testing.T) {
// if indra.CI == "false" {
// log2.SetLogLevel(log2.Trace)
// }
// var clients []*Engine
// var e error
// ctx, cancel := context.WithCancel(context.Background())
// if clients, e = CreateNMockCircuitsWithSessions(4, 4,
// ctx); fails(e) {
// t.Error(e)
// t.FailNow()
// }
// client := clients[0]
// log.D.Ln("client", client.Mgr().GetLocalNodeAddressString())
// // Start up the clients.
// for _, v := range clients {
// go v.Start()
// }
// quit := qu.T()
// var wg sync.WaitGroup
// go func() {
// select {
// case <-time.After(5 * time.Second):
// case <-quit:
// return
// }
// cancel()
// quit.Q()
// t.Error("SendGetBalance test failed")
// }()
// i := 0
// wg.Add(1)
// returnHops := client.Mgr().GetSessionsAtHop(5)
// var returner *sessions.Data
// if len(returnHops) > 1 {
// cryptorand.Shuffle(len(returnHops), func(i, j int) {
// returnHops[i], returnHops[j] = returnHops[j],
// returnHops[i]
// })
// }
// returner = returnHops[0]
// clients[0].SendGetBalance(returner, clients[0].Mgr().Sessions[i],
// func(cf nonce.ID, ifc interface{}, b slice.Bytes) (e error) {
// log.D.Ln("success")
// wg.Done()
// quit.Q()
// return
// })
// wg.Wait()
// quit.Q()
// cancel()
// for _, v := range clients {
// v.Shutdown()
// }
//}