// runTest initializes the environment for the tests and allows for // the proper return code if the test fails or succeeds. func runTest(m *testing.M) int { // Create stub server for Sponged. server := setup() cfg.SetString("SPONGED_URL", server) mongoURI := cfg.MustURL("MONGO_URI") // Initialize MongoDB using the `tests.TestSession` as the name of the // master session. if err := db.RegMasterSession(tests.Context, tests.TestSession, mongoURI.String(), 0); err != nil { fmt.Println("Can't register master session: " + err.Error()) return 1 } a = routes.API() // Snatch the mongo session so we can create some test data. db, err := db.NewMGO(tests.Context, tests.TestSession) if err != nil { fmt.Println("Unable to get Mongo session") return 1 } defer db.CloseMGO(tests.Context) if err = db.NewCayley(tests.Context, tests.TestSession); err != nil { fmt.Println("Unable to get Cayley support") } store, err := db.GraphHandle(tests.Context) if err != nil { fmt.Println("Unable to get Cayley handle") return 1 } defer store.Close() if err := tstdata.Generate(db); err != nil { fmt.Println("Could not generate test data.") return 1 } defer tstdata.Drop(db) if err := loadItems("context", db, store); err != nil { fmt.Println("Could not import items") return 1 } defer unloadItems("context", db, store) return m.Run() }
// Remove removes the specified Item from the items collection and removes any // relevant quads from the graph database. // 200 Success, 400 Bad Request, 404 Not Found, 500 Internal func (itemHandle) Remove(c *web.Context) error { db := c.Ctx["DB"].(*db.DB) graphHandle, err := db.GraphHandle(c.SessionID) if err != nil { return err } if err := sponge.Remove(c.SessionID, db, graphHandle, c.Params["id"]); err != nil { return err } c.Respond(nil, http.StatusNoContent) return nil }
// setup initializes for each indivdual test. func setup(t *testing.T) (*db.DB, *cayley.Handle) { tests.ResetLog() db, err := db.NewMGO(tests.Context, tests.TestSession) if err != nil { t.Fatalf("%s\tShould be able to get a Mongo session : %v", tests.Failed, err) } if err := db.NewCayley(tests.Context, tests.TestSession); err != nil { t.Fatalf("%s\tShould be able to get Cayley support : %v", tests.Failed, err) } store, err := db.GraphHandle(tests.Context) if err != nil { t.Fatalf("\t%s\tShould be able to get a Cayley handle : %v", tests.Failed, err) } return db, store }
// Import receives POSTed data, itemizes it then imports it via the item API. // 204 SuccessNoContent, 400 Bad Request, 404 Not Found, 500 Internal. func (dataHandle) Import(c *web.Context) error { // Unmarshall the data packet from the Request Body. var dat map[string]interface{} if err := json.NewDecoder(c.Request.Body).Decode(&dat); err != nil { return err } // Create a new item with known Type, Version and Data. itm := item.Item{ Type: c.Params["type"], Version: defaultVersion, Data: dat, } // Item.ID must be inferred from the source_id in the data. if err := itm.InferIDFromData(); err != nil { return err } db := c.Ctx["DB"].(*db.DB) graphHandle, err := db.GraphHandle(c.SessionID) if err != nil { return err } // Upsert the item into the items collection and add/remove necessary // quads to/from the graph. if err := sponge.Import(c.SessionID, db, graphHandle, &itm); err != nil { return err } // Respond with no content success. c.Respond(itm, http.StatusOK) return nil }
// Import inserts or updates the posted Item document into the items collection // and adds/removes any necessary quads to/from the relationship graph. // 204 SuccessNoContent, 400 Bad Request, 404 Not Found, 500 Internal func (itemHandle) Import(c *web.Context) error { // Decode the item. var itm item.Item if err := json.NewDecoder(c.Request.Body).Decode(&itm); err != nil { return err } db := c.Ctx["DB"].(*db.DB) graphHandle, err := db.GraphHandle(c.SessionID) if err != nil { return err } // Upsert the item into the items collection and add/remove necessary // quads to/from the graph. if err := sponge.Import(c.SessionID, db, graphHandle, &itm); err != nil { return err } c.Respond(itm, http.StatusOK) return nil }
// runTest initializes the environment for the tests and allows for // the proper return code if the test fails or succeeds. func runTest(m *testing.M) int { mongoURI := cfg.MustURL("MONGO_URI") // Initialize MongoDB using the `tests.TestSession` as the name of the // master session. if err := db.RegMasterSession(tests.Context, tests.TestSession, mongoURI.String(), 0); err != nil { fmt.Println("Can't register master session: " + err.Error()) return 1 } // Setup the app for performing tests. a = routes.API() // Snatch the mongo session so we can create some test data. db, err := db.NewMGO(tests.Context, tests.TestSession) if err != nil { fmt.Println("Unable to get Mongo session") return 1 } defer db.CloseMGO(tests.Context) if err := db.NewCayley(tests.Context, tests.TestSession); err != nil { fmt.Println("Unable to get Cayley support") } store, err := db.GraphHandle(tests.Context) if err != nil { fmt.Println("Unable to get Cayley handle") return 1 } defer store.Close() if err := tstdata.Generate(db); err != nil { fmt.Println("Could not generate test data.") return 1 } defer tstdata.Drop(db) // Load the queries. if err := loadQuery(db, "basic.json"); err != nil { fmt.Println("Could not load queries in basic.json") return 1 } if err := loadQuery(db, "basic_view.json"); err != nil { fmt.Println("Could not load queries in basic.json") return 1 } if err := loadQuery(db, "basic_var.json"); err != nil { fmt.Println("Could not load queries in basic_var.json") return 1 } defer qfix.Remove(db, "QTEST_O") if err := loadScript(db, "basic_script_pre.json"); err != nil { fmt.Println("Could not load scripts in basic_script_pre.json") return 1 } if err := loadScript(db, "basic_script_pst.json"); err != nil { fmt.Println("Could not load scripts in basic_script_pst.json") return 1 } defer sfix.Remove(db, "STEST_O") if err := loadMasks(db, "basic.json"); err != nil { fmt.Println("Could not load masks.") return 1 } defer mfix.Remove(db, "test_xenia_data") if err := loadRelationships("context", db); err != nil { fmt.Println("Could not load relationships.") return 1 } defer relationshipfix.Remove("context", db, relPrefix) if err := loadViews("context", db); err != nil { fmt.Println("Could not load views.") return 1 } defer viewfix.Remove("context", db, viewPrefix) if err := loadPatterns("context", db); err != nil { fmt.Println("Could not load patterns") return 1 } defer patternfix.Remove("context", db, "PTEST_") if err := loadItems("context", db, store); err != nil { fmt.Println("Could not import items") return 1 } defer unloadItems("context", db, store) return m.Run() }