func (suite *FactorsTestSuite) SetupSuite() { const coreConfig = ` [server] bindip = "" port = 8080 maxprocs = 4 cache = false lrucache = 700000000 gzip = true reqsizelimit = 1073741824 [mongodb] host = "127.0.0.1" port = 27017 db = "argo_core_test_factors" ` _ = gcfg.ReadStringInto(&suite.cfg, coreConfig) suite.respNokeyprovided = "404 page not found" suite.respUnauthorized = "Unauthorized" suite.confHandler = respond.ConfHandler{Config: suite.cfg} suite.router = mux.NewRouter().StrictSlash(false).PathPrefix("/api/v2/factors").Subrouter() HandleSubrouter(suite.router, &suite.confHandler) // TODO: I don't like it here that I rewrite the test data. // However, this is a test for factors, not for AuthenticateTenant function. suite.tenantcfg.Host = "127.0.0.1" suite.tenantcfg.Port = 27017 suite.tenantcfg.Db = "AR_test" }
// Setup the Test Environment func (suite *OperationsProfilesTestSuite) SetupSuite() { const testConfig = ` [server] bindip = "" port = 8080 maxprocs = 4 cache = false lrucache = 700000000 gzip = true reqsizelimit = 1073741824 [mongodb] host = "127.0.0.1" port = 27017 db = "AR_test_op_profiles" ` _ = gcfg.ReadStringInto(&suite.cfg, testConfig) suite.respUnauthorized = "Unauthorized" suite.tenantDbConf = config.MongoConfig{ Host: "localhost", Port: 27017, Db: "AR_test_operations_profiles_tenant", Password: "******", Username: "******", Store: "ar", } suite.clientkey = "123456" suite.confHandler = respond.ConfHandler{suite.cfg} suite.router = mux.NewRouter().StrictSlash(false).PathPrefix("/api/v2").Subrouter() HandleSubrouter(suite.router, &suite.confHandler) }
// Setup the Test Environment func (suite *endpointGroupAvailabilityTestSuite) SetupSuite() { const testConfig = ` [server] bindip = "" port = 8080 maxprocs = 4 cache = false lrucache = 700000000 gzip = true [mongodb] host = "127.0.0.1" port = 27017 db = "ARGO_test_endpointGroup_availability" ` _ = gcfg.ReadStringInto(&suite.cfg, testConfig) suite.tenantDbConf.Db = "ARGO_test_endpointGroup_availability_tenant" suite.tenantDbConf.Password = "******" suite.tenantDbConf.Username = "******" suite.tenantDbConf.Store = "ar" suite.clientkey = "secretkey" // Create router and confhandler for test suite.confHandler = respond.ConfHandler{suite.cfg} suite.router = mux.NewRouter().StrictSlash(true).PathPrefix("/api/v2/results").Subrouter() HandleSubrouter(suite.router, &suite.confHandler) }
// Setup the Test Environment func (suite *TenantTestSuite) SetupSuite() { const testConfig = ` [server] bindip = "" port = 8080 maxprocs = 4 cache = false lrucache = 700000000 gzip = true reqsizelimit = 1073741824 [mongodb] host = "127.0.0.1" port = 27017 db = "argo_test_tenants" ` _ = gcfg.ReadStringInto(&suite.cfg, testConfig) suite.confHandler = respond.ConfHandler{suite.cfg} suite.router = mux.NewRouter().StrictSlash(false).PathPrefix("/api/v2/admin").Subrouter() HandleSubrouter(suite.router, &suite.confHandler) suite.clientkey = "S3CR3T" suite.respUnauthorized = `{ "status": { "message": "Unauthorized", "code": "401", "details": "You need to provide a correct authentication token using the header 'x-api-key'" } }` suite.respBadJSON = `{ "status": { "message": "Bad Request", "code": "400", "details": "Request Body contains malformed JSON, thus rendering the Request Bad" } }` suite.respTenantNotFound = `{ "status": { "message": "Not Found", "code": "404", "details": "item with the specific ID was not found on the server" } }` }
// NewRouter creates the main router that will be used by the api func NewRouter(cfg config.Config) *mux.Router { confhandler := respond.ConfHandler{Config: cfg} router := mux.NewRouter().StrictSlash(false) for _, subroute := range routesV2 { subrouter := router. PathPrefix("/api/v2" + subroute.Pattern). Name(subroute.Name). Subrouter() subroute.SubrouterHandler(subrouter, &confhandler) } // router.Walk(PrintRoutes) return router }
// Setup the Test Environment func (suite *RecomputationsProfileTestSuite) SetupSuite() { const testConfig = ` [server] bindip = "" port = 8080 maxprocs = 4 cache = false lrucache = 700000000 gzip = true reqsizelimit = 1073741824 [mongodb] host = "127.0.0.1" port = 27017 db = "AR_test_recomputations2" ` _ = gcfg.ReadStringInto(&suite.cfg, testConfig) suite.respRecomputationsCreated = " <root>\n" + " <Message>A recalculation request has been filed</Message>\n </root>" suite.respUnauthorized = "Unauthorized" suite.tenantDbConf = config.MongoConfig{ Host: "localhost", Port: 27017, Db: "AR_test_recomputations2_tenant", Password: "******", Username: "******", Store: "ar", } suite.clientkey = "mysecretcombination" suite.confHandler = respond.ConfHandler{suite.cfg} suite.router = mux.NewRouter().StrictSlash(false).PathPrefix("/api/v2").Subrouter() HandleSubrouter(suite.router, &suite.confHandler) }
// Setup the Test Environment // This function runs before any test and setups the environment // A test configuration object is instantiated using a reference // to testdb: argo_test_details. Also here is are instantiated some expected // xml response validation messages (authorization,crud responses). // Also the testdb is seeded with tenants,reports,metric_profiles and status_metrics func (suite *StatusEndpointGroupsTestSuite) SetupTest() { const testConfig = ` [server] bindip = "" port = 8080 maxprocs = 4 cache = false lrucache = 700000000 gzip = true [mongodb] host = "127.0.0.1" port = 27017 db = "argotest_egroups" ` _ = gcfg.ReadStringInto(&suite.cfg, testConfig) // Create router and confhandler for test suite.confHandler = respond.ConfHandler{suite.cfg} suite.router = mux.NewRouter().StrictSlash(true).PathPrefix("/api/v2/status").Subrouter() HandleSubrouter(suite.router, &suite.confHandler) // Connect to mongo testdb session, _ := mongo.OpenSession(suite.cfg.MongoDB) // Add authentication token to mongo testdb seedAuth := bson.M{"api_key": "S3CR3T"} _ = mongo.Insert(session, suite.cfg.MongoDB.Db, "authentication", seedAuth) // seed mongo session, err := mgo.Dial(suite.cfg.MongoDB.Host) if err != nil { panic(err) } defer session.Close() // seed a tenant to use c := session.DB(suite.cfg.MongoDB.Db).C("tenants") c.Insert(bson.M{ "id": "6ac7d684-1f8e-4a02-a502-720e8f11e50c", "info": bson.M{ "name": "GUARDIANS", "email": "email@something2", "website": "www.gotg.com", "created": "2015-10-20 02:08:04", "updated": "2015-10-20 02:08:04"}, "db_conf": []bson.M{ bson.M{ "store": "main", "server": "localhost", "port": 27017, "database": "argotest_egroups_egi", "username": "", "password": ""}, }, "users": []bson.M{ bson.M{ "name": "egi_user", "email": "*****@*****.**", "api_key": "KEY1"}, }}) c.Insert(bson.M{ "id": "6ac7d684-1f8e-4a02-a502-720e8f11e50d", "info": bson.M{ "name": "AVENGERS", "email": "email@something2", "website": "www.gotg.com", "created": "2015-10-20 02:08:04", "updated": "2015-10-20 02:08:04"}, "db_conf": []bson.M{ bson.M{ "store": "main", "server": "localhost", "port": 27017, "database": "argotest_egroups_eudat", "username": "", "password": ""}, }, "users": []bson.M{ bson.M{ "name": "eudat_user", "email": "*****@*****.**", "api_key": "KEY2"}, }}) // get dbconfiguration based on the tenant // Prepare the request object request, _ := http.NewRequest("GET", "", strings.NewReader("")) // add the content-type header to application/json request.Header.Set("Content-Type", "application/json") // add the authentication token which is seeded in testdb request.Header.Set("x-api-key", "KEY1") // authenticate user's api key and find corresponding tenant suite.tenantDbConf, err = authentication.AuthenticateTenant(request.Header, suite.cfg) // Now seed the report DEFINITIONS c = session.DB(suite.tenantDbConf.Db).C("reports") c.Insert(bson.M{ "id": "eba61a9e-22e9-4521-9e47-ecaa4a494364", "info": bson.M{ "name": "Report_A", "description": "report aaaaa", "created": "2015-9-10 13:43:00", "updated": "2015-10-11 13:43:00", }, "topology_schema": bson.M{ "group": bson.M{ "type": "NGI", "group": bson.M{ "type": "SITES", }, }, }, "profiles": []bson.M{ bson.M{ "id": "6ac7d684-1f8e-4a02-a502-720e8f11e50b", "type": "metric", "name": "profile1"}, bson.M{ "id": "6ac7d684-1f8e-4a02-a502-720e8f11e523", "type": "operations", "name": "profile2"}, bson.M{ "id": "6ac7d684-1f8e-4a02-a502-720e8f11e50q", "type": "aggregation", "name": "profile3"}, }, "filter_tags": []bson.M{ bson.M{ "name": "name1", "value": "value1"}, bson.M{ "name": "name2", "value": "value2"}, }}) // seed the status detailed metric data c = session.DB(suite.tenantDbConf.Db).C("status_endpoint_groups") c.Insert(bson.M{ "report": "eba61a9e-22e9-4521-9e47-ecaa4a494364", "date_integer": 20150501, "timestamp": "2015-05-01T00:00:00Z", "endpoint_group": "HG-03-AUTH", "status": "OK", }) c.Insert(bson.M{ "report": "eba61a9e-22e9-4521-9e47-ecaa4a494364", "date_integer": 20150501, "timestamp": "2015-05-01T01:00:00Z", "endpoint_group": "HG-03-AUTH", "status": "CRITICAL", }) c.Insert(bson.M{ "report": "eba61a9e-22e9-4521-9e47-ecaa4a494364", "date_integer": 20150501, "timestamp": "2015-05-01T05:00:00Z", "endpoint_group": "HG-03-AUTH", "status": "OK", }) // get dbconfiguration based on the tenant // Prepare the request object request, _ = http.NewRequest("GET", "", strings.NewReader("")) // add the content-type header to application/json request.Header.Set("Content-Type", "application/json") // add the authentication token which is seeded in testdb request.Header.Set("x-api-key", "KEY2") // authenticate user's api key and find corresponding tenant suite.tenantDbConf, err = authentication.AuthenticateTenant(request.Header, suite.cfg) // Now seed the reports DEFINITIONS c = session.DB(suite.tenantDbConf.Db).C("reports") c.Insert(bson.M{ "id": "eba61a9e-22e9-4521-9e47-ecaa4a494365", "info": bson.M{ "name": "Report_B", "description": "report aaaaa", "created": "2015-9-10 13:43:00", "updated": "2015-10-11 13:43:00", }, "topology_schema": bson.M{ "group": bson.M{ "type": "EUDAT_GROUPS", "group": bson.M{ "type": "EUDAT_SITES", }, }, }, "profiles": []bson.M{ bson.M{ "id": "6ac7d684-1f8e-4a02-a502-720e8f11e50b", "type": "metric", "name": "eudat.CRITICAL"}, bson.M{ "id": "6ac7d684-1f8e-4a02-a502-720e8f11e523", "type": "operations", "name": "profile2"}, bson.M{ "id": "6ac7d684-1f8e-4a02-a502-720e8f11e50q", "type": "aggregation", "name": "profile3"}, }, "filter_tags": []bson.M{ bson.M{ "name": "name1", "value": "value1"}, bson.M{ "name": "name2", "value": "value2"}, }}) // seed the status detailed metric data c = session.DB(suite.tenantDbConf.Db).C("status_endpoint_groups") c.Insert(bson.M{ "report": "eba61a9e-22e9-4521-9e47-ecaa4a494365", "date_integer": 20150501, "timestamp": "2015-05-01T00:00:00Z", "endpoint_group": "EL-01-AUTH", "status": "OK", }) c.Insert(bson.M{ "report": "eba61a9e-22e9-4521-9e47-ecaa4a494365", "date_integer": 20150501, "timestamp": "2015-05-01T01:00:00Z", "endpoint_group": "EL-01-AUTH", "status": "CRITICAL", }) c.Insert(bson.M{ "report": "eba61a9e-22e9-4521-9e47-ecaa4a494365", "date_integer": 20150501, "timestamp": "2015-05-01T05:00:00Z", "endpoint_group": "EL-01-AUTH", "status": "OK", }) }
// Setup the Test Environment // This function runs before any test and setups the environment // A test configuration object is instantiated using a reference // to testdb: argo_test_details. Also here is are instantiated some expected // xml response validation messages (authorization,crud responses). // Also the testdb is seeded with tenants,reports,metric_profiles and status_metrics func (suite *metricResultTestSuite) SetupTest() { const testConfig = ` [server] bindip = "" port = 8080 maxprocs = 4 cache = false lrucache = 700000000 gzip = true [mongodb] host = "127.0.0.1" port = 27017 db = "ARGO_test_metric_result" ` _ = gcfg.ReadStringInto(&suite.cfg, testConfig) suite.tenantDbConf.Db = "ARGO_test_metric_result" suite.tenantDbConf.Password = "******" suite.tenantDbConf.Username = "******" suite.tenantDbConf.Store = "ar" suite.clientkey = "KEY1" // Create router and confhandler for test suite.confHandler = respond.ConfHandler{suite.cfg} suite.router = mux.NewRouter().StrictSlash(true).PathPrefix("/api/v2/metric_result").Subrouter() HandleSubrouter(suite.router, &suite.confHandler) // Connect to mongo testdb session, _ := mongo.OpenSession(suite.cfg.MongoDB) // Add authentication token to mongo testdb seedAuth := bson.M{"api_key": "S3CR3T"} _ = mongo.Insert(session, suite.cfg.MongoDB.Db, "authentication", seedAuth) // seed mongo session, err := mgo.Dial(suite.cfg.MongoDB.Host) if err != nil { panic(err) } defer session.Close() // seed a tenant to use c := session.DB(suite.cfg.MongoDB.Db).C("tenants") c.Insert(bson.M{ "id": "6ac7d684-1f8e-4a02-a502-720e8f11e50c", "info": bson.M{ "name": "EGI", "email": "email@something2", "website": "www.gotg.com", "created": "2015-10-20 02:08:04", "updated": "2015-10-20 02:08:04"}, "db_conf": []bson.M{ bson.M{ "store": "main", "server": "localhost", "port": 27017, "database": "ARGO_test_metric_result_egi", "username": "", "password": ""}, }, "users": []bson.M{ bson.M{ "name": "egi_user", "email": "*****@*****.**", "api_key": "KEY1"}, }}) // get dbconfiguration based on the tenant // Prepare the request object request, _ := http.NewRequest("GET", "", strings.NewReader("")) // add the content-type header to application/json request.Header.Set("Content-Type", "application/json;") // add the authentication token which is seeded in testdb request.Header.Set("x-api-key", "KEY1") // authenticate user's api key and find corresponding tenant suite.tenantDbConf, err = authentication.AuthenticateTenant(request.Header, suite.cfg) // seed the status detailed metric data c = session.DB(suite.tenantDbConf.Db).C("status_metrics") c.Insert(bson.M{ "monitoring_box": "nagios3.hellasgrid.gr", "date_integer": 20150501, "timestamp": "2015-05-01T00:00:00Z", "service": "CREAM-CE", "host": "cream01.afroditi.gr", "metric": "emi.cream.CREAMCE-JobSubmit", "status": "OK", "time_integer": 0, "previous_state": "OK", "previous_timestamp": "2015-04-30T23:59:00Z", "summary": "Cream status is ok", "message": "Cream job submission test return value of ok", }) c.Insert(bson.M{ "monitoring_box": "nagios3.hellasgrid.gr", "date_integer": 20150501, "timestamp": "2015-05-01T01:00:00Z", "service": "CREAM-CE", "host": "cream01.afroditi.gr", "metric": "emi.cream.CREAMCE-JobSubmit", "status": "CRITICAL", "time_integer": 10000, "previous_state": "OK", "previous_timestamp": "2015-05-01T00:00:00Z", "summary": "Cream status is CRITICAL", "message": "Cream job submission test failed", }) c.Insert(bson.M{ "monitoring_box": "nagios3.hellasgrid.gr", "date_integer": 20150501, "timestamp": "2015-05-01T05:00:00Z", "service": "CREAM-CE", "host": "cream01.afroditi.gr", "metric": "emi.cream.CREAMCE-JobSubmit", "status": "OK", "time_integer": 50000, "previous_state": "CRITICAL", "previous_timestamp": "2015-05-01T01:00:00Z", "summary": "Cream status is ok", "message": "Cream job submission test return value of ok", }) }
// Setup the Test Environment func (suite *ReportTestSuite) SetupSuite() { const testConfig = ` [server] bindip = "" port = 8080 maxprocs = 4 cache = false lrucache = 700000000 gzip = true reqsizelimit = 1073741824 [mongodb] host = "127.0.0.1" port = 27017 db = "argo_test_reports2" ` _ = gcfg.ReadStringInto(&suite.cfg, testConfig) suite.respReportCreated = `{ "status": { "message": "Successfully Created Report", "code": "201" }, "data": { "id": ".+-.+-.+-.+-.+", "links": { "self": "https://myapi.test.com/api/v2/reports/.+-.+-.+-.+-.+" } } }` suite.respReportUpdated = `{ "status": { "message": "Report was successfully updated", "code": "200" } }` suite.respReportDeleted = `{ "status": { "message": "Report was successfully deleted", "code": "200" } }` suite.respReportNotFound = `{ "status": { "message": "Report Not Found", "code": "404" } }` suite.respBadJSON = `{ "status": { "message": "Malformated json input data", "code": "400", "details": "Check that your json input is valid" } }` suite.respUnauthorized = `{ "status": { "message": "Unauthorized", "code": "401", "details": "You need to provide a correct authentication token using the header 'x-api-key'" } }` suite.confHandler = respond.ConfHandler{ Config: suite.cfg, } suite.router = mux.NewRouter().StrictSlash(true).PathPrefix("/api/v2").Subrouter() HandleSubrouter(suite.router, &suite.confHandler) }