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  }