aboutsummaryrefslogtreecommitdiff
path: root/storage_test.go
diff options
context:
space:
mode:
authorEmiliano Ciavatta2020-04-01 12:21:58 +0000
committerEmiliano Ciavatta2020-04-01 12:21:58 +0000
commit2b9ccbe76c6975fe7cd09a3260ba459d59b9970a (patch)
tree6eaf94a797261f2db0736d4abe999db219fcad7a /storage_test.go
Initial commit
Diffstat (limited to 'storage_test.go')
-rw-r--r--storage_test.go126
1 files changed, 126 insertions, 0 deletions
diff --git a/storage_test.go b/storage_test.go
new file mode 100644
index 0000000..5356596
--- /dev/null
+++ b/storage_test.go
@@ -0,0 +1,126 @@
+package main
+
+import (
+ "crypto/sha256"
+ "fmt"
+ "go.mongodb.org/mongo-driver/mongo"
+ "go.mongodb.org/mongo-driver/mongo/options"
+ "golang.org/x/net/context"
+ "os"
+ "testing"
+ "time"
+)
+
+const testCollection = "characters"
+
+var storage Storage
+var testContext context.Context
+
+func testInsert(t *testing.T) {
+ // insert a document in an invalid connection
+ insertedId, err := storage.InsertOne(testContext, "invalid_collection",
+ OrderedDocument{{"key", "invalid"}})
+ if insertedId != nil || err == nil {
+ t.Fatal("inserting documents in invalid collections must fail")
+ }
+
+ // insert ordered document
+ beatriceId, err := storage.InsertOne(testContext, testCollection,
+ OrderedDocument{{"name", "Beatrice"}, {"description", "blablabla"}})
+ if err != nil {
+ t.Fatal(err)
+ }
+ if beatriceId == nil {
+ t.Fatal("failed to insert an ordered document")
+ }
+
+ // insert unordered document
+ virgilioId, err := storage.InsertOne(testContext, testCollection,
+ UnorderedDocument{"name": "Virgilio", "description": "blablabla"})
+ if err != nil {
+ t.Fatal(err)
+ }
+ if virgilioId == nil {
+ t.Fatal("failed to insert an unordered document")
+ }
+
+ // insert document with custom id
+ danteId := "000000"
+ insertedId, err = storage.InsertOne(testContext, testCollection,
+ UnorderedDocument{"_id": danteId, "name": "Dante Alighieri", "description": "blablabla"})
+ if err != nil {
+ t.Fatal(err)
+ }
+ if insertedId != danteId {
+ t.Fatal("returned id doesn't match")
+ }
+
+ // insert duplicate document
+ insertedId, err = storage.InsertOne(testContext, testCollection,
+ UnorderedDocument{"_id": danteId, "name": "Dante Alighieri", "description": "blablabla"})
+ if insertedId != nil || err == nil {
+ t.Fatal("inserting duplicate id must fail")
+ }
+}
+
+func testFindOne(t *testing.T) {
+ // find a document in an invalid connection
+ result, err := storage.FindOne(testContext, "invalid_collection",
+ OrderedDocument{{"key", "invalid"}})
+ if result != nil || err == nil {
+ t.Fatal("find a document in an invalid collections must fail")
+ }
+
+ // find an existing document
+ result, err = storage.FindOne(testContext, testCollection, OrderedDocument{{"_id", "000000"}})
+ if err != nil {
+ t.Fatal(err)
+ }
+ if result == nil {
+ t.Fatal("FindOne cannot find the valid document")
+ }
+ name, ok := result["name"]
+ if !ok || name != "Dante Alighieri" {
+ t.Fatal("document retrieved with FindOne is invalid")
+ }
+
+ // find an existing document
+ result, err = storage.FindOne(testContext, testCollection, OrderedDocument{{"_id", "invalid_id"}})
+ if err != nil {
+ t.Fatal(err)
+ }
+ if result != nil {
+ t.Fatal("FindOne cannot find an invalid document")
+ }
+}
+
+
+
+func TestBasicOperations(t *testing.T) {
+ t.Run("testInsert", testInsert)
+ t.Run("testFindOne", testFindOne)
+}
+
+func TestMain(m *testing.M) {
+ uniqueDatabaseName := sha256.Sum256([]byte(time.Now().String()))
+ client, err := mongo.NewClient(options.Client().ApplyURI("mongodb://localhost:27017"))
+ if err != nil {
+ panic("failed to create mongo client")
+ }
+
+ db := client.Database(fmt.Sprintf("%x", uniqueDatabaseName[:31]))
+ storage = Storage{
+ client: client,
+ collections: map[string]*mongo.Collection{testCollection: db.Collection(testCollection)},
+ }
+
+ testContext, _ = context.WithTimeout(context.Background(), 10 * time.Second)
+
+ err = storage.Connect(nil)
+ if err != nil {
+ panic(err)
+ }
+
+ exitCode := m.Run()
+ os.Exit(exitCode)
+}