DynamoDB/client/client_test.go

63 lines
1.2 KiB
Go

package main
import (
"fmt"
"local/dynamodb/server/config"
"local/dynamodb/server/serve"
"net/http/httptest"
"os"
"strings"
"testing"
)
func TestAll(t *testing.T) {
validKey := "key"
validValue := "value"
servers := []*serve.Server{}
addresses := []string{}
for i := 0; i < 10; i++ {
s := newServer(t)
servers = append(servers, s)
addresses = append(addresses, "http://localhost"+s.Port)
go s.Run()
}
client, err := New(1, 1, addresses...)
if err != nil {
t.Fatalf("cannot make client: %v", err)
}
for i := 0; i < 5; i++ {
key := fmt.Sprintf("%s-%d", validKey, i)
if err := client.Set(key, []byte(validValue)); err != nil {
t.Fatalf("cannot set with client: %v", err)
}
if v, err := client.Get(key); err != nil {
t.Fatalf("cannot get with client: %v", err)
} else if string(v) != validValue {
t.Fatalf("wrong get with client: got %q, want %q", v, validValue)
}
}
}
func newServer(t *testing.T) *serve.Server {
os.Setenv("DB", "MAP")
os.Setenv("PORT", getPort())
if err := config.New(); err != nil {
t.Fatal(err)
}
s := serve.New()
if err := s.Routes(); err != nil {
t.Fatal(err)
}
return s
}
func getPort() string {
s := httptest.NewServer(nil)
s.Close()
return s.URL[strings.LastIndex(s.URL, ":"):]
}