package client import ( "log" "os" "strconv" "testing" "forge.redroom.link/yves/meowlib" "github.com/stretchr/testify/assert" ) func exists(filename string) bool { if _, err := os.Stat(filename); err == nil { return true } else { return false } } func createId() *Identity { config := GetConfig() config.IdentityFile = "test.id" config.memoryPassword = "generalPassword" // ! Extension to quickly open db : Debug only ! config.DbSuffix = ".sqlite" id, err := CreateIdentity("myname") if err != nil { log.Fatal("CreateIdentity failed") } err = id.Save() if err != nil { log.Fatal("Save failed") } var p Peer p.Name = "testName" p.MyEncryptionKp = meowlib.NewKeyPair() p.MyIdentity = meowlib.NewKeyPair() p.MyLookupKp = meowlib.NewKeyPair() p.Name = "foo" p.ContactPublicKey = p.MyLookupKp.Public p.ContactEncryption = p.MyIdentity.Public p.ContactLookupKey = p.MyEncryptionKp.Public //p.Contact.AddUrls([]string{"http:/127.0.0.1/meow", "tcp://localhost:1234"}) //todo add servers id.Peers = append(id.Peers, &p) return id } func TestLoad(t *testing.T) { if exists("test.id") { os.Remove("test.id") } id, err := LoadIdentity("test.id", "toto") if err != nil { id, err1 := CreateIdentity("myname") if err1 != nil { log.Fatal("CreateIdentity failed") } id.Save() } else { log.Println(id.Nickname) } id, err = LoadIdentity("test.id", "toto") if err != nil { log.Println(err.Error()) } assert.Equal(t, err, nil, "2nd Load error") assert.Equal(t, id.Nickname, "myname", "The two words should be the same.") if exists("test.id") { os.Remove("test.id") } } func TestHidePeer(t *testing.T) { id := createId() name := id.Peers[0].Name assert.Equal(t, len(id.Peers), 1) h := len(id.HiddenPeers) id.HidePeer(0, "mypassword") assert.Equal(t, len(id.Peers), 0) assert.Equal(t, len(id.HiddenPeers), h+1) id.TryUnlockHidden("mypassword") assert.Equal(t, len(id.unlockedHiddenPeers), 1) assert.Equal(t, id.unlockedHiddenPeers[0].Name, name) if exists("test.id") { os.Remove("test.id") } } // test GetRequestJobs func TestGetRequestJobs(t *testing.T) { // Create a mock Identity object id := &Identity{ Peers: []*Peer{ { MyPullServers: []string{"server1", "server2"}, MyLookupKp: meowlib.NewKeyPair(), }, { MyPullServers: []string{"server3", "server4"}, MyLookupKp: meowlib.NewKeyPair(), }, }, unlockedHiddenPeers: []*Peer{ { MyPullServers: []string{"server5", "server6"}, MyLookupKp: meowlib.NewKeyPair(), }, }, } id.MessageServers = ServerStorage{ DbFile: "test.db", } GetConfig().SetMemPass("test") GetConfig().SetIdentity(id) for i := 1; i < 10; i++ { // initialize a Server with name "server+i" srv := CreateServerFromUrl("server" + strconv.Itoa(i)) id.MessageServers.StoreServer(srv) } // Call GetRequestJobs jobs := id.GetRequestJobs() // Check that the returned list is as expected assert.Equal(t, 6, len(jobs), "Expected 6 jobs") // Check that each job has the correct server and lookup keys for _, job := range jobs { //fmt.Println(job.Server.GetUid(), job.LookupKeys) assert.Contains(t, []string{"server1", "server2", "server3", "server4", "server5", "server6"}, job.Server.GetUid(), "Unexpected server UID") assert.Len(t, job.LookupKeys, 1, "Expected 1 lookup key per job") } // Clean up // recursively remove the test.db folder os.RemoveAll("test.db") }