func TestTryI(t *testing.T) { fmt.Println("TestTryI()") unittest.Equals(t, TryI(-1, func(int) bool { return true }), false) unittest.Equals(t, TryI(0, func(int) bool { return true }), false) // this function isn't thread safe i := 0 f := func( attempt int, ) bool { i++ if i == 4 { return true } return false } unittest.Equals(t, TryI(3, f), false) i = 0 unittest.Equals(t, TryI(4, f), true) }
func TestTryFail(t *testing.T) { fmt.Println("TestTryFail()") unittest.Equals(t, TryFail(-1, func() bool { return true }, nil), false) unittest.Equals(t, TryFail(0, func() bool { return true }, nil), false) unittest.Equals(t, TryFail(-1, nil, func() bool { return true }), true) unittest.Equals(t, TryFail(0, nil, func() bool { return true }), true) // this function isn't thread safe i := 0 f := func() bool { i++ if i == 4 { return true } return false } unittest.Equals(t, TryFail(3, f, nil), false) i = 0 unittest.Equals(t, TryFail(3, f, func() bool { return false }), false) i = 0 unittest.Equals(t, TryFail(3, f, func() bool { return true }), true) i = 0 unittest.Equals(t, TryFail(4, f, nil), true) i = 0 unittest.Equals(t, TryFail(4, f, func() bool { return false }), true) }
/* for these unittests to pass you have to have the transmission api running you're expected to have atleast one existing torrent these unittests overall don't offer much in integrity I'm open to accepting a proper set of unittests with mock torrents */ func TestTransmission(t *testing.T) { fmt.Println("TestTransmission()") client := Construct( nil, // http client "", // address "", // username "", // password ) unittest.NotNil(t, client) // GetTorrents torrents, err := client.GetTorrents() unittest.IsNil(t, err) unittest.Equals(t, len(torrents) > 0, true) // print examples of a real populated torrents bs, err := json.MarshalIndent(torrents, "", "\t") if err != nil { log.Printf("Transmission Error: %s\n", err) } unittest.IsNil(t, err) fmt.Printf("Torrents:\n%s\n", bs) for _, t := range torrents { // if you don't know the magnet hash of your torrents // you should be looping and determining which of these torrents you want to work with // the library requires magnet hashes and not the ID in transmission because that was too complex // a magnet hash will never change and the transmission ID is unreliable to the end user // // my usecase is to check t.Creator to see which services I tagged the torrent to found := false done := false // t.IsDone() or: for _, f := range t.Files { found = true // checking the Bytescompleted on every file seems to be the only accurate way to see if a torrent is done // other values were incorrect if f.Bytescompleted == f.Length { done = true } else { done = false break } } if found { if done { log.Printf("%s %s | all files done\n", t.HashString, t.Name) } else { log.Printf("%s %s | not done\n", t.HashString, t.Name) } } } /* // don't run these automatically // we don't want our users first experience with this library to be anger client.RemoveTorrents( "remove_magnet", "remove this", "remove doesn't delete files", ) client.RemoveUnknownTorrents( "dontremove_magnet", "remove everything else", ) client.StopTorrents( "stop_magnet", "stop this", ) client.StopUnknownTorrents( "dontstop_magnet", "stop everything else", ) client.StartTorrents( "start_magnet", "start this", ) client.StartUnknownTorrents( "dontstart_magnet", "start everything else", ) client.StartNowTorrents( "startnow_magnet", "start this now!", ) client.StartNowUnknownTorrents( "dontstartnow_magnet", "start everything else now!", ) client.VerifyTorrents( "verify_magnet", "verify this", "Hello, is it me you're looking for?", ) client.VerifyUnknownTorrents( "dontverify_magnet", "don't verify this", "I trust this", ) client.ReannounceTorrents( "reannounce_magnet", "reannounce this", "shoutout", ) client.ReannounceUnknownTorrents( "dontreannounce_magnet", "don't announce this", "don't mention me", ) */ // session session, err := client.GetSession() unittest.IsNil(t, err) unittest.NotNil(t, session) bs, _ = json.MarshalIndent(session, "", "\t") fmt.Printf("GetSession:\n%s\n", bs) // stats stats, err := client.GetStats() unittest.IsNil(t, err) unittest.NotNil(t, session) bs, _ = json.MarshalIndent(stats, "", "\t") fmt.Printf("GetStats:\n%s\n", bs) // add torrent /* torrent, err := client.AddTorrent( "", // `magnet:?xt=urn:btih:673b3cc3f5a4d6b1fecdf64eeaa8733887de2433&dn=localhost-1434676188.tar.gz.pgp&tr=http%3A%2F%2Flocalhost%3A6969%2Fannounce&tr=http%3A%2F%2Flocalhost%3A6970%2Fannounce`, "", // "/path/to/downloads/", ) unittest.IsNil(t, err) unittest.NotNil(t, torrent) bs, _ = json.MarshalIndent(torrent, "", "\t") fmt.Printf("AddTorrent:\n%s\n", bs) */ }