github.com/code-to-go/safepool.lib@v0.0.0-20221205180519-ee25e63c226e/pool/pool_test.go (about) 1 package pool 2 3 import ( 4 "bytes" 5 "fmt" 6 "testing" 7 "time" 8 9 "github.com/code-to-go/safepool.lib/security" 10 "github.com/code-to-go/safepool.lib/sql" 11 "github.com/code-to-go/safepool.lib/transport" 12 13 _ "github.com/mattn/go-sqlite3" 14 "github.com/stretchr/testify/assert" 15 ) 16 17 func TestSafeCreation(t *testing.T) { 18 sql.DbName = "safepool.test.db" 19 sql.DeleteDB() 20 sql.LoadSQLFromFile("../sql/sqlite.sql") 21 err := sql.OpenDB() 22 assert.NoErrorf(t, err, "cannot open db") 23 24 self, err := security.NewIdentity("test") 25 assert.NoErrorf(t, err, "cannot create identity") 26 27 c, err := transport.ReadConfig("../../credentials/s3-2.yaml") 28 assert.NoErrorf(t, err, "Cannot load S3 config: %v", err) 29 30 err = Define(Config{"test.safepool.net/public", []transport.Config{c}}) 31 assert.NoErrorf(t, err, "Cannot define pool: %v", err) 32 33 ForceCreation = true 34 ReplicaPeriod = 0 35 s, err := Create(self, "test.safepool.net/public") 36 assert.NoErrorf(t, err, "Cannot create pool: %v", err) 37 s.Close() 38 39 s, err = Open(self, "test.safepool.net/public") 40 assert.NoErrorf(t, err, "Cannot open pool: %v", err) 41 defer s.Close() 42 43 s1 := "just a simple test" 44 h, err := s.Post("test.txt", bytes.NewBufferString(s1), nil) 45 assert.NoErrorf(t, err, "Cannot create post: %v", err) 46 47 b2 := bytes.Buffer{} 48 err = s.Get(h.Id, nil, &b2) 49 assert.NoErrorf(t, err, "Cannot get %d: %v", h.Id, err) 50 51 s2 := b2.String() 52 assert.EqualValues(t, s1, s2) 53 54 for _, h := range s.List(uint64(0), time.Time{}) { 55 fmt.Printf("\t%s\t%d\t%d", h.Name, h.Size, h.Id) 56 } 57 s.Delete() 58 } 59 60 func BenchmarkSafe(b *testing.B) { 61 sql.DbName = "safepool.test.db" 62 sql.DeleteDB() 63 sql.LoadSQLFromFile("../sql/sqlite.sql") 64 err := sql.OpenDB() 65 assert.NoErrorf(b, err, "cannot open db") 66 67 self, err := security.NewIdentity("test") 68 assert.NoErrorf(b, err, "cannot create identity") 69 70 //c, err := transport.ReadConfig("../../credentials/s3-2.yaml") 71 c, err := transport.ReadConfig("../../credentials/local.yaml") 72 assert.NoErrorf(b, err, "Cannot load S3 config: %v", err) 73 74 err = Define(Config{"test.safepool.net/public", []transport.Config{c}}) 75 assert.NoErrorf(b, err, "Cannot define pool: %v", err) 76 77 ForceCreation = true 78 ReplicaPeriod = 0 79 s, err := Create(self, "test.safepool.net/public") 80 assert.NoErrorf(b, err, "Cannot create pool: %v", err) 81 s.Close() 82 83 s, err = Open(self, "test.safepool.net/public") 84 assert.NoErrorf(b, err, "Cannot open pool: %v", err) 85 defer s.Close() 86 87 s1 := "just a simple test" 88 h, err := s.Post("test.txt", bytes.NewBufferString(s1), nil) 89 assert.NoErrorf(b, err, "Cannot create post: %v", err) 90 91 b2 := bytes.Buffer{} 92 err = s.Get(h.Id, nil, &b2) 93 assert.NoErrorf(b, err, "Cannot get %d: %v", h.Id, err) 94 95 s2 := b2.String() 96 assert.EqualValues(b, s1, s2) 97 98 for _, h := range s.List(uint64(0), time.Time{}) { 99 fmt.Printf("\t%s\t%d\t%d", h.Name, h.Size, h.Id) 100 } 101 s.Delete() 102 } 103 104 func TestSafeReplica(t *testing.T) { 105 sql.DbName = "safepool.test.db" 106 sql.DeleteDB() 107 sql.LoadSQLFromFile("../sql/sqlite.sql") 108 err := sql.OpenDB() 109 assert.NoErrorf(t, err, "cannot open db") 110 111 self, err := security.NewIdentity("test") 112 assert.NoErrorf(t, err, "cannot create identity") 113 114 s3, err := transport.ReadConfig("../../credentials/s3-2.yaml") 115 assert.NoErrorf(t, err, "Cannot load S3 config: %v", err) 116 local, err := transport.ReadConfig("../../credentials/local.yaml") 117 assert.NoErrorf(t, err, "Cannot load local config: %v", err) 118 119 err = Define(Config{"test.safepool.net/public", []transport.Config{s3, local}}) 120 assert.NoErrorf(t, err, "Cannot define pool: %v", err) 121 122 ForceCreation = true 123 ReplicaPeriod = time.Second * 5 124 125 now := time.Now() 126 s, err := Create(self, "test.safepool.net/public") 127 creationTime := time.Since(now) 128 assert.NoErrorf(t, err, "Cannot create pool: %v", err) 129 defer s.Close() 130 defer s.Delete() 131 132 s1 := "just a simple test" 133 now = time.Now() 134 _, err = s.Post("test.txt", bytes.NewBufferString(s1), nil) 135 postTime := time.Since(now) 136 assert.NoErrorf(t, err, "Cannot create post: %v", err) 137 138 time.Sleep(5 * time.Minute) 139 140 fmt.Printf("creation: %s, post: %s\n", creationTime, postTime) 141 }