From d1cb79ffba57febaf43547166a39178e46f5361f Mon Sep 17 00:00:00 2001 From: Sonja Happ Date: Tue, 26 Jan 2021 17:20:35 +0100 Subject: [PATCH] WIP: scenario tests and IC tests independent of hard coded data #44 --- helper/test_data.go | 135 +--------- helper/test_utilities.go | 4 +- routes/infrastructure-component/ic_test.go | 276 +++++++-------------- routes/scenario/scenario_test.go | 103 +++----- 4 files changed, 128 insertions(+), 390 deletions(-) diff --git a/helper/test_data.go b/helper/test_data.go index 6ba8b94..f4567b8 100644 --- a/helper/test_data.go +++ b/helper/test_data.go @@ -24,7 +24,6 @@ package helper import ( "encoding/json" "fmt" - "git.rwth-aachen.de/acs/public/villas/web-backend-go/configuration" "git.rwth-aachen.de/acs/public/villas/web-backend-go/database" "github.com/jinzhu/gorm/dialects/postgres" "golang.org/x/crypto/bcrypt" @@ -63,10 +62,13 @@ var StrPasswordC = "guestpw" // Hash passwords with bcrypt algorithm var bcryptCost = 10 +var pw0, _ = bcrypt.GenerateFromPassword([]byte(StrPassword0), bcryptCost) var pwA, _ = bcrypt.GenerateFromPassword([]byte(StrPasswordA), bcryptCost) var pwB, _ = bcrypt.GenerateFromPassword([]byte(StrPasswordB), bcryptCost) var pwC, _ = bcrypt.GenerateFromPassword([]byte(StrPasswordC), bcryptCost) +var User0 = database.User{Username: "User_0", Password: string(pw0), + Role: "Admin", Mail: "User_0@example.com"} var UserA = database.User{Username: "User_A", Password: string(pwA), Role: "User", Mail: "User_A@example.com", Active: true} var UserB = database.User{Username: "User_B", Password: string(pwB), @@ -83,27 +85,6 @@ type UserRequest struct { Active string `json:"active,omitempty"` } -var NewUserA = UserRequest{ - Username: UserA.Username, - Password: StrPasswordA, - Role: UserA.Role, - Mail: UserA.Mail, -} - -var NewUserB = UserRequest{ - Username: UserB.Username, - Password: StrPasswordB, - Role: UserB.Role, - Mail: UserB.Mail, -} - -var NewUserC = UserRequest{ - Username: UserC.Username, - Password: StrPasswordC, - Role: UserC.Role, - Mail: UserC.Mail, -} - // Infrastructure components var propertiesA = json.RawMessage(`{"prop1" : "a nice prop"}`) @@ -148,11 +129,6 @@ var ScenarioA = database.Scenario{ Running: true, StartParameters: postgres.Jsonb{startParametersA}, } -var ScenarioB = database.Scenario{ - Name: "Scenario_B", - Running: false, - StartParameters: postgres.Jsonb{startParametersB}, -} // Component Configuration @@ -184,27 +160,6 @@ var OutSignalB = database.Signal{ Unit: "V", } -var OutSignalC = database.Signal{ - Name: "outSignal_C", - Direction: "out", - Index: 3, - Unit: "---", -} - -var OutSignalD = database.Signal{ - Name: "outSignal_D", - Direction: "out", - Index: 4, - Unit: "---", -} - -var OutSignalE = database.Signal{ - Name: "outSignal_E", - Direction: "out", - Index: 5, - Unit: "---", -} - var InSignalA = database.Signal{ Name: "inSignal_A", Direction: "in", @@ -231,11 +186,8 @@ var DashboardB = database.Dashboard{ } // Widgets -var customPropertiesBox = json.RawMessage(`{"border_color" : "#4287f5", "border_color_opacity": 1, "background_color" : "#961520", "background_color_opacity" : 1}`) var customPropertiesSlider = json.RawMessage(`{"default_value" : 0, "orientation" : 0, "rangeUseMinMax": false, "rangeMin" : 0, "rangeMax": 200, "rangeUseMinMax" : true, "showUnit": true, "continous_update": false, "value": "", "resizeLeftRightLock": false, "resizeTopBottomLock": true, "step": 0.1 }`) var customPropertiesLabel = json.RawMessage(`{"textSize" : "20", "fontColor" : "#4287f5", "fontColor_opacity": 1}`) -var customPropertiesButton = json.RawMessage(`{"pressed": false, "toggle" : false, "on_value" : 1, "off_value" : 0, "background_color": "#961520", "font_color": "#4287f5", "border_color": "#4287f5", "background_color_opacity": 1}`) -var customPropertiesLamp = json.RawMessage(`{"signal" : 0, "on_color" : "#4287f5", "off_color": "#961520", "threshold" : 0.5, "on_color_opacity": 1, "off_color_opacity": 1}`) var WidgetA = database.Widget{ Name: "Label", @@ -267,51 +219,6 @@ var WidgetB = database.Widget{ SignalIDs: []int64{}, } -var WidgetC = database.Widget{ - Name: "Box", - Type: "Box", - Width: 200, - Height: 200, - MinHeight: 10, - MinWidth: 50, - X: 300, - Y: 10, - Z: 0, - IsLocked: false, - CustomProperties: postgres.Jsonb{customPropertiesBox}, - SignalIDs: []int64{}, -} - -var WidgetD = database.Widget{ - Name: "Button", - Type: "Button", - Width: 100, - Height: 100, - MinHeight: 50, - MinWidth: 100, - X: 10, - Y: 50, - Z: 0, - IsLocked: false, - CustomProperties: postgres.Jsonb{customPropertiesButton}, - SignalIDs: []int64{}, -} - -var WidgetE = database.Widget{ - Name: "Lamp", - Type: "Lamp", - Width: 200, - Height: 20, - MinHeight: 10, - MinWidth: 50, - X: 50, - Y: 300, - Z: 0, - IsLocked: false, - CustomProperties: postgres.Jsonb{customPropertiesLamp}, - SignalIDs: []int64{}, -} - func ReadTestDataFromJson(path string) error { jsonFile, err := os.Open(path) @@ -334,40 +241,18 @@ func ReadTestDataFromJson(path string) error { return nil } -// add default admin user, normal users and a guest to the DB +// add test users defined above func AddTestUsers() error { - err := ReadTestDataFromJson("../../testdata/testdata.json") - if err != nil { - return err - } - - //create a copy of global test data - if len(GlobalTestData.Users) == 0 { - return fmt.Errorf("no users in test data") - } - + testUsers := []database.User{User0, UserA, UserB, UserC} database.DBpool.AutoMigrate(&database.User{}) - err, _ = database.DBAddAdminUser(configuration.GlobalConfig) - if err != nil { - return err - } - for _, user := range GlobalTestData.Users { - if user.Role != "Admin" { - // add users to DB that are not admin users - var newUser database.User - newUser.Username = user.Username - newUser.Role = user.Role - newUser.Mail = user.Mail - - pwEnc, _ := bcrypt.GenerateFromPassword([]byte(user.Password), 10) - newUser.Password = string(pwEnc) - err = database.DBpool.Create(&newUser).Error - if err != nil { - return err - } + for _, user := range testUsers { + err := database.DBpool.Create(&user).Error + if err != nil { + return err } + } return nil diff --git a/helper/test_utilities.go b/helper/test_utilities.go index dd014bd..78c3138 100644 --- a/helper/test_utilities.go +++ b/helper/test_utilities.go @@ -46,8 +46,8 @@ type Credentials struct { } var AdminCredentials = Credentials{ - Username: "admin", - Password: "xyz789", + Username: "User_0", + Password: StrPassword0, } var UserACredentials = Credentials{ diff --git a/routes/infrastructure-component/ic_test.go b/routes/infrastructure-component/ic_test.go index 49f01e0..bdd2676 100644 --- a/routes/infrastructure-component/ic_test.go +++ b/routes/infrastructure-component/ic_test.go @@ -89,6 +89,34 @@ type ICAction struct { } `json:"properties,omitempty"` } +var newIC1 = ICRequest{ + UUID: "7be0322d-354e-431e-84bd-ae4c9633138b", + WebsocketURL: "https://villas.k8s.eonerc.rwth-aachen.de/ws/ws_sig", + APIURL: "https://villas.k8s.eonerc.rwth-aachen.de/ws/api/v2", + Type: "villas-node", + Name: "ACS Demo Signals", + Category: "gateway", + State: "idle", + Location: "k8s", + Description: "A signal generator for testing purposes", + StartParameterScheme: postgres.Jsonb{json.RawMessage(`{"prop1" : "a nice prop"}`)}, + ManagedExternally: newFalse(), +} + +var newIC2 = ICRequest{ + UUID: "4854af30-325f-44a5-ad59-b67b2597de68", + WebsocketURL: "xxx.yyy.zzz.aaa", + APIURL: "https://villas.k8s.eonerc.rwth-aachen.de/ws/api/v2", + Type: "dpsim", + Name: "Test DPsim Simulator", + Category: "simulator", + State: "running", + Location: "k8s", + Description: "This is a test description", + StartParameterScheme: postgres.Jsonb{json.RawMessage(`{"prop1" : "a nice prop"}`)}, + ManagedExternally: newTrue(), +} + func TestMain(m *testing.M) { err := configuration.InitConfig() if err != nil { @@ -152,7 +180,7 @@ func TestAddICAsAdmin(t *testing.T) { // try to POST malformed IC (required fields missing, validation should fail) // should result in an unprocessable entity newMalformedIC := ICRequest{ - UUID: helper.ICB.UUID, + UUID: newIC2.UUID, } code, resp, err = helper.TestEndpoint(router, token, "/api/ic", "POST", helper.KeyModels{"ic": newMalformedIC}) @@ -160,26 +188,13 @@ func TestAddICAsAdmin(t *testing.T) { assert.Equalf(t, 422, code, "Response body: \n%v\n", resp) // test POST ic/ $newIC - newIC := ICRequest{ - UUID: helper.ICA.UUID, - WebsocketURL: helper.ICA.WebsocketURL, - APIURL: helper.ICB.APIURL, - Type: helper.ICA.Type, - Name: helper.ICA.Name, - Category: helper.ICA.Category, - State: helper.ICA.State, - Location: helper.ICA.Location, - Description: helper.ICA.Description, - StartParameterScheme: helper.ICA.StartParameterScheme, - ManagedExternally: newFalse(), - } code, resp, err = helper.TestEndpoint(router, token, - "/api/ic", "POST", helper.KeyModels{"ic": newIC}) + "/api/ic", "POST", helper.KeyModels{"ic": newIC1}) assert.NoError(t, err) assert.Equalf(t, 200, code, "Response body: \n%v\n", resp) // Compare POST's response with the newIC - err = helper.CompareResponse(resp, helper.KeyModels{"ic": newIC}) + err = helper.CompareResponse(resp, helper.KeyModels{"ic": newIC1}) assert.NoError(t, err) // Read newIC's ID from the response @@ -194,7 +209,7 @@ func TestAddICAsAdmin(t *testing.T) { assert.Equalf(t, 200, code, "Response body: \n%v\n", resp) // Compare GET's response with the newIC - err = helper.CompareResponse(resp, helper.KeyModels{"ic": newIC}) + err = helper.CompareResponse(resp, helper.KeyModels{"ic": newIC1}) assert.NoError(t, err) // Try to GET a IC that does not exist @@ -204,28 +219,14 @@ func TestAddICAsAdmin(t *testing.T) { assert.NoError(t, err) assert.Equalf(t, 404, code, "Response body: \n%v\n", resp) - newExternalIC := ICRequest{ - UUID: helper.ICB.UUID, - WebsocketURL: helper.ICB.WebsocketURL, - APIURL: helper.ICB.APIURL, - Type: helper.ICB.Type, - Name: helper.ICB.Name, - Category: helper.ICB.Category, - State: helper.ICB.State, - Location: helper.ICB.Location, - Description: helper.ICB.Description, - StartParameterScheme: helper.ICB.StartParameterScheme, - ManagedExternally: newTrue(), - } - // test creation of external IC (should lead to emission of AMQP message to VILLAS) code, resp, err = helper.TestEndpoint(router, token, - "/api/ic", "POST", helper.KeyModels{"ic": newExternalIC}) + "/api/ic", "POST", helper.KeyModels{"ic": newIC2}) assert.NoError(t, err) assert.Equalf(t, 200, code, "Response body: \n%v\n", resp) // Compare POST's response with the newExternalIC - err = helper.CompareResponse(resp, helper.KeyModels{"ic": newExternalIC}) + err = helper.CompareResponse(resp, helper.KeyModels{"ic": newIC2}) assert.NoError(t, err) } @@ -240,23 +241,10 @@ func TestAddICAsUser(t *testing.T) { assert.NoError(t, err) // test POST ic/ $newIC - newIC := ICRequest{ - UUID: helper.ICA.UUID, - WebsocketURL: helper.ICA.WebsocketURL, - Type: helper.ICA.Type, - Name: helper.ICA.Name, - Category: helper.ICA.Category, - State: helper.ICA.State, - Location: helper.ICA.Location, - Description: helper.ICA.Description, - StartParameterScheme: helper.ICA.StartParameterScheme, - ManagedExternally: newFalse(), - } - // This should fail with unprocessable entity 422 error code // Normal users are not allowed to add ICs code, resp, err := helper.TestEndpoint(router, token, - "/api/ic", "POST", helper.KeyModels{"ic": newIC}) + "/api/ic", "POST", helper.KeyModels{"ic": newIC1}) assert.NoError(t, err) assert.Equalf(t, 422, code, "Response body: \n%v\n", resp) } @@ -272,25 +260,13 @@ func TestUpdateICAsAdmin(t *testing.T) { assert.NoError(t, err) // test POST ic/ $newIC - newIC := ICRequest{ - UUID: helper.ICA.UUID, - WebsocketURL: helper.ICA.WebsocketURL, - Type: helper.ICA.Type, - Name: helper.ICA.Name, - Category: helper.ICA.Category, - State: helper.ICA.State, - Location: helper.ICA.Location, - Description: helper.ICA.Description, - StartParameterScheme: helper.ICA.StartParameterScheme, - ManagedExternally: newFalse(), - } code, resp, err := helper.TestEndpoint(router, token, - "/api/ic", "POST", helper.KeyModels{"ic": newIC}) + "/api/ic", "POST", helper.KeyModels{"ic": newIC1}) assert.NoError(t, err) assert.Equalf(t, 200, code, "Response body: \n%v\n", resp) // Compare POST's response with the newIC - err = helper.CompareResponse(resp, helper.KeyModels{"ic": newIC}) + err = helper.CompareResponse(resp, helper.KeyModels{"ic": newIC1}) assert.NoError(t, err) // Read newIC's ID from the response @@ -305,14 +281,14 @@ func TestUpdateICAsAdmin(t *testing.T) { assert.Equalf(t, 400, code, "Response body: \n%v\n", resp) // Test PUT IC - newIC.WebsocketURL = "ThisIsMyNewURL" + newIC1.WebsocketURL = "ThisIsMyNewURL" code, resp, err = helper.TestEndpoint(router, token, - fmt.Sprintf("/api/ic/%v", newICID), "PUT", helper.KeyModels{"ic": newIC}) + fmt.Sprintf("/api/ic/%v", newICID), "PUT", helper.KeyModels{"ic": newIC1}) assert.NoError(t, err) assert.Equalf(t, 200, code, "Response body: \n%v\n", resp) // Compare PUT's response with the updated newIC - err = helper.CompareResponse(resp, helper.KeyModels{"ic": newIC}) + err = helper.CompareResponse(resp, helper.KeyModels{"ic": newIC1}) assert.NoError(t, err) // Get the updated newIC @@ -323,7 +299,7 @@ func TestUpdateICAsAdmin(t *testing.T) { assert.Equalf(t, 200, code, "Response body: \n%v\n", resp) // Compare GET's response with the updated newIC - err = helper.CompareResponse(resp, helper.KeyModels{"ic": newIC}) + err = helper.CompareResponse(resp, helper.KeyModels{"ic": newIC1}) assert.NoError(t, err) // fake an IC update (create) message @@ -332,18 +308,18 @@ func TestUpdateICAsAdmin(t *testing.T) { update.Status.State = new(string) *update.Status.State = "idle" update.Status.Name = new(string) - *update.Status.Name = helper.ICB.Name + *update.Status.Name = newIC2.Name update.Status.Category = new(string) - *update.Status.Category = helper.ICB.Category + *update.Status.Category = newIC2.Category update.Status.Type = new(string) - *update.Status.Type = helper.ICB.Type + *update.Status.Type = newIC2.Type payload, err := json.Marshal(update) assert.NoError(t, err) var headers map[string]interface{} headers = make(map[string]interface{}) // empty map - headers["uuid"] = helper.ICB.UUID // set uuid + headers["uuid"] = newIC2.UUID // set uuid msg := amqp.Publishing{ DeliveryMode: 2, @@ -390,20 +366,8 @@ func TestUpdateICAsUser(t *testing.T) { assert.NoError(t, err) // test POST ic/ $newIC - newIC := ICRequest{ - UUID: helper.ICA.UUID, - WebsocketURL: helper.ICA.WebsocketURL, - Type: helper.ICA.Type, - Name: helper.ICA.Name, - Category: helper.ICA.Category, - State: helper.ICA.State, - Location: helper.ICA.Location, - Description: helper.ICA.Description, - StartParameterScheme: helper.ICA.StartParameterScheme, - ManagedExternally: newFalse(), - } code, resp, err := helper.TestEndpoint(router, token, - "/api/ic", "POST", helper.KeyModels{"ic": newIC}) + "/api/ic", "POST", helper.KeyModels{"ic": newIC1}) assert.NoError(t, err) assert.Equalf(t, 200, code, "Response body: \n%v\n", resp) @@ -418,9 +382,9 @@ func TestUpdateICAsUser(t *testing.T) { // Test PUT IC // This should fail with unprocessable entity status code 422 - newIC.WebsocketURL = "ThisIsMyNewURL" + newIC1.WebsocketURL = "ThisIsMyNewURL2" code, resp, err = helper.TestEndpoint(router, token, - fmt.Sprintf("/api/ic/%v", newICID), "PUT", helper.KeyModels{"ic": newIC}) + fmt.Sprintf("/api/ic/%v", newICID), "PUT", helper.KeyModels{"ic": newIC1}) assert.NoError(t, err) assert.Equalf(t, 422, code, "Response body: \n%v\n", resp) @@ -437,20 +401,8 @@ func TestDeleteICAsAdmin(t *testing.T) { assert.NoError(t, err) // test POST ic/ $newIC - newIC := ICRequest{ - UUID: helper.ICA.UUID, - WebsocketURL: helper.ICA.WebsocketURL, - Type: helper.ICA.Type, - Name: helper.ICA.Name, - Category: helper.ICA.Category, - State: helper.ICA.State, - Location: helper.ICA.Location, - Description: helper.ICA.Description, - StartParameterScheme: helper.ICA.StartParameterScheme, - ManagedExternally: newFalse(), - } code, resp, err := helper.TestEndpoint(router, token, - "/api/ic", "POST", helper.KeyModels{"ic": newIC}) + "/api/ic", "POST", helper.KeyModels{"ic": newIC1}) assert.NoError(t, err) assert.Equalf(t, 200, code, "Response body: \n%v\n", resp) @@ -470,7 +422,7 @@ func TestDeleteICAsAdmin(t *testing.T) { assert.Equalf(t, 200, code, "Response body: \n%v\n", resp) // Compare DELETE's response with the newIC - err = helper.CompareResponse(resp, helper.KeyModels{"ic": newIC}) + err = helper.CompareResponse(resp, helper.KeyModels{"ic": newIC1}) assert.NoError(t, err) // Again count the number of all the ICs returned @@ -486,18 +438,18 @@ func TestDeleteICAsAdmin(t *testing.T) { update.Status.State = new(string) *update.Status.State = "idle" update.Status.Name = new(string) - *update.Status.Name = helper.ICB.Name + *update.Status.Name = newIC2.Name update.Status.Category = new(string) - *update.Status.Category = helper.ICB.Category + *update.Status.Category = newIC2.Category update.Status.Type = new(string) - *update.Status.Type = helper.ICB.Type + *update.Status.Type = newIC2.Type payload, err := json.Marshal(update) assert.NoError(t, err) var headers map[string]interface{} headers = make(map[string]interface{}) // empty map - headers["uuid"] = helper.ICB.UUID // set uuid + headers["uuid"] = newIC2.UUID // set uuid msg := amqp.Publishing{ DeliveryMode: 2, @@ -548,20 +500,8 @@ func TestDeleteICAsUser(t *testing.T) { assert.NoError(t, err) // test POST ic/ $newIC - newIC := ICRequest{ - UUID: helper.ICA.UUID, - WebsocketURL: helper.ICA.WebsocketURL, - Type: helper.ICA.Type, - Name: helper.ICA.Name, - Category: helper.ICA.Category, - State: helper.ICA.State, - Location: helper.ICA.Location, - Description: helper.ICA.Description, - StartParameterScheme: helper.ICA.StartParameterScheme, - ManagedExternally: newFalse(), - } code, resp, err := helper.TestEndpoint(router, token, - "/api/ic", "POST", helper.KeyModels{"ic": newIC}) + "/api/ic", "POST", helper.KeyModels{"ic": newIC1}) assert.NoError(t, err) assert.Equalf(t, 200, code, "Response body: \n%v\n", resp) @@ -576,7 +516,7 @@ func TestDeleteICAsUser(t *testing.T) { // Test DELETE ICs // This should fail with unprocessable entity status code 422 - newIC.WebsocketURL = "ThisIsMyNewURL" + newIC1.WebsocketURL = "ThisIsMyNewURL3" code, resp, err = helper.TestEndpoint(router, token, fmt.Sprintf("/api/ic/%v", newICID), "DELETE", nil) assert.NoError(t, err) @@ -599,39 +539,15 @@ func TestGetAllICs(t *testing.T) { assert.NoError(t, err) // test POST ic/ $newICA - newICA := ICRequest{ - UUID: helper.ICA.UUID, - WebsocketURL: helper.ICA.WebsocketURL, - Type: helper.ICA.Type, - Name: helper.ICA.Name, - Category: helper.ICA.Category, - State: helper.ICA.State, - Location: helper.ICA.Location, - Description: helper.ICA.Description, - StartParameterScheme: helper.ICA.StartParameterScheme, - ManagedExternally: newFalse(), - } code, resp, err := helper.TestEndpoint(router, token, - "/api/ic", "POST", helper.KeyModels{"ic": newICA}) + "/api/ic", "POST", helper.KeyModels{"ic": newIC1}) assert.NoError(t, err) assert.Equalf(t, 200, code, "Response body: \n%v\n", resp) // test POST ic/ $newICB - newICB := ICRequest{ - UUID: helper.ICB.UUID, - WebsocketURL: helper.ICB.WebsocketURL, - Type: helper.ICB.Type, - Name: helper.ICB.Name, - Category: helper.ICB.Category, - State: helper.ICB.State, - Location: helper.ICB.Location, - Description: helper.ICB.Description, - StartParameterScheme: helper.ICB.StartParameterScheme, - ManagedExternally: newFalse(), - } code, resp, err = helper.TestEndpoint(router, token, - "/api/ic", "POST", helper.KeyModels{"ic": newICB}) + "/api/ic", "POST", helper.KeyModels{"ic": newIC1}) assert.NoError(t, err) assert.Equalf(t, 200, code, "Response body: \n%v\n", resp) @@ -666,20 +582,8 @@ func TestGetConfigsOfIC(t *testing.T) { assert.NoError(t, err) // test POST ic/ $newICA - newICA := ICRequest{ - UUID: helper.ICA.UUID, - WebsocketURL: helper.ICA.WebsocketURL, - Type: helper.ICA.Type, - Name: helper.ICA.Name, - Category: helper.ICA.Category, - State: helper.ICA.State, - Location: helper.ICA.Location, - Description: helper.ICA.Description, - StartParameterScheme: helper.ICA.StartParameterScheme, - ManagedExternally: newFalse(), - } code, resp, err := helper.TestEndpoint(router, token, - "/api/ic", "POST", helper.KeyModels{"ic": newICA}) + "/api/ic", "POST", helper.KeyModels{"ic": newIC1}) assert.NoError(t, err) assert.Equalf(t, 200, code, "Response body: \n%v\n", resp) @@ -727,20 +631,8 @@ func TestSendActionToIC(t *testing.T) { assert.NoError(t, err) // test POST ic/ $newICA - newICA := ICRequest{ - UUID: helper.ICA.UUID, - WebsocketURL: helper.ICA.WebsocketURL, - Type: helper.ICA.Type, - Name: helper.ICA.Name, - Category: helper.ICA.Category, - State: helper.ICA.State, - Location: helper.ICA.Location, - Description: helper.ICA.Description, - StartParameterScheme: helper.ICA.StartParameterScheme, - ManagedExternally: newFalse(), - } code, resp, err := helper.TestEndpoint(router, token, - "/api/ic", "POST", helper.KeyModels{"ic": newICA}) + "/api/ic", "POST", helper.KeyModels{"ic": newIC1}) assert.NoError(t, err) assert.Equalf(t, 200, code, "Response body: \n%v\n", resp) @@ -754,7 +646,7 @@ func TestSendActionToIC(t *testing.T) { When: time.Now().Unix(), } action1.Properties.UUID = new(string) - *action1.Properties.UUID = newICA.UUID + *action1.Properties.UUID = newIC1.UUID actions := [1]ICAction{action1} // Send action to IC @@ -792,7 +684,7 @@ func TestCreateUpdateViaAMQPRecv(t *testing.T) { var headers map[string]interface{} headers = make(map[string]interface{}) // empty map - headers["uuid"] = helper.ICB.UUID // set uuid + headers["uuid"] = newIC2.UUID // set uuid msg := amqp.Publishing{ DeliveryMode: 2, @@ -824,28 +716,28 @@ func TestCreateUpdateViaAMQPRecv(t *testing.T) { // complete the (required) data of an IC update.Status.Name = new(string) - *update.Status.Name = helper.ICA.Name + *update.Status.Name = newIC1.Name update.Status.Category = new(string) - *update.Status.Category = helper.ICA.Category + *update.Status.Category = newIC1.Category update.Status.Type = new(string) - *update.Status.Type = helper.ICA.Type + *update.Status.Type = newIC1.Type update.Status.Uptime = new(float64) *update.Status.Uptime = -1.0 update.Status.WS_url = new(string) - *update.Status.WS_url = helper.ICA.WebsocketURL + *update.Status.WS_url = newIC1.WebsocketURL update.Status.API_url = new(string) - *update.Status.API_url = helper.ICA.APIURL + *update.Status.API_url = newIC1.APIURL update.Status.Description = new(string) - *update.Status.Description = helper.ICA.Description + *update.Status.Description = newIC1.Description update.Status.Location = new(string) - *update.Status.Location = helper.ICA.Location + *update.Status.Location = newIC1.Location payload, err = json.Marshal(update) assert.NoError(t, err) var headersA map[string]interface{} headersA = make(map[string]interface{}) // empty map - headersA["uuid"] = helper.ICA.UUID + headersA["uuid"] = newIC1.UUID msg = amqp.Publishing{ DeliveryMode: 2, @@ -922,28 +814,28 @@ func TestDeleteICViaAMQPRecv(t *testing.T) { *update.Status.State = "idle" // complete the (required) data of an IC update.Status.Name = new(string) - *update.Status.Name = helper.ICA.Name + *update.Status.Name = newIC1.Name update.Status.Category = new(string) - *update.Status.Category = helper.ICA.Category + *update.Status.Category = newIC1.Category update.Status.Type = new(string) - *update.Status.Type = helper.ICA.Type + *update.Status.Type = newIC1.Type update.Status.Uptime = new(float64) *update.Status.Uptime = -1.0 update.Status.WS_url = new(string) - *update.Status.WS_url = helper.ICA.WebsocketURL + *update.Status.WS_url = newIC1.WebsocketURL update.Status.API_url = new(string) - *update.Status.API_url = helper.ICA.APIURL + *update.Status.API_url = newIC1.APIURL update.Status.Description = new(string) - *update.Status.Description = helper.ICA.Description + *update.Status.Description = newIC1.Description update.Status.Location = new(string) - *update.Status.Location = helper.ICA.Location + *update.Status.Location = newIC1.Location payload, err := json.Marshal(update) assert.NoError(t, err) var headers map[string]interface{} headers = make(map[string]interface{}) // empty map - headers["uuid"] = helper.ICB.UUID // set uuid + headers["uuid"] = newIC2.UUID // set uuid msg := amqp.Publishing{ DeliveryMode: 2, @@ -974,9 +866,9 @@ func TestDeleteICViaAMQPRecv(t *testing.T) { // add scenario newScenario := ScenarioRequest{ - Name: helper.ScenarioA.Name, - Running: helper.ScenarioA.Running, - StartParameters: helper.ScenarioA.StartParameters, + Name: "ScenarioA", + Running: true, + StartParameters: postgres.Jsonb{RawMessage: json.RawMessage(`{"parameter1" : "testValue1B", "parameter2" : "testValue2B", "parameter3" : 55}`)}, } code, resp, err := helper.TestEndpoint(router, token, @@ -994,11 +886,11 @@ func TestDeleteICViaAMQPRecv(t *testing.T) { // Add component config and associate with IC and scenario newConfig := ConfigRequest{ - Name: helper.ConfigA.Name, + Name: "ConfigA", ScenarioID: uint(newScenarioID), ICID: 1, - StartParameters: helper.ConfigA.StartParameters, - FileIDs: helper.ConfigA.FileIDs, + StartParameters: postgres.Jsonb{json.RawMessage(`{"parameter1" : "testValue1B", "parameter2" : "testValue2B", "parameter3" : 55}`)}, + FileIDs: []int64{}, } code, resp, err = helper.TestEndpoint(router, token, diff --git a/routes/scenario/scenario_test.go b/routes/scenario/scenario_test.go index 4c3c7d8..e88368a 100644 --- a/routes/scenario/scenario_test.go +++ b/routes/scenario/scenario_test.go @@ -22,6 +22,7 @@ package scenario import ( + "encoding/json" "fmt" "os" "testing" @@ -51,6 +52,18 @@ type UserRequest struct { Active string `json:"active,omitempty"` } +var newScenario1 = ScenarioRequest{ + Name: "Scenario1", + Running: true, + StartParameters: postgres.Jsonb{json.RawMessage(`{"parameter1" : "testValue1A", "parameter2" : "testValue2A", "parameter3" : 42}`)}, +} + +var newScenario2 = ScenarioRequest{ + Name: "Scenario2", + Running: false, + StartParameters: postgres.Jsonb{json.RawMessage(`{"parameter1" : "testValue1B", "parameter2" : "testValue2B", "parameter3" : 55}`)}, +} + func TestMain(m *testing.M) { err := configuration.InitConfig() if err != nil { @@ -82,12 +95,6 @@ func TestAddScenario(t *testing.T) { database.MigrateModels() assert.NoError(t, helper.AddTestUsers()) - newScenario := ScenarioRequest{ - Name: helper.ScenarioA.Name, - Running: helper.ScenarioA.Running, - StartParameters: helper.ScenarioA.StartParameters, - } - // authenticate as normal user token, err := helper.AuthenticateForTest(router, "/api/authenticate", "POST", helper.UserACredentials) @@ -102,12 +109,12 @@ func TestAddScenario(t *testing.T) { // test POST scenarios/ $newScenario as normal user code, resp, err = helper.TestEndpoint(router, token, - "/api/scenarios", "POST", helper.KeyModels{"scenario": newScenario}) + "/api/scenarios", "POST", helper.KeyModels{"scenario": newScenario1}) assert.NoError(t, err) assert.Equalf(t, 200, code, "Response body: \n%v\n", resp) // Compare POST's response with the newScenario - err = helper.CompareResponse(resp, helper.KeyModels{"scenario": newScenario}) + err = helper.CompareResponse(resp, helper.KeyModels{"scenario": newScenario1}) assert.NoError(t, err) // Read newScenario's ID from the response @@ -121,7 +128,7 @@ func TestAddScenario(t *testing.T) { assert.Equalf(t, 200, code, "Response body: \n%v\n", resp) // Compare GET's response with the newScenario - err = helper.CompareResponse(resp, helper.KeyModels{"scenario": newScenario}) + err = helper.CompareResponse(resp, helper.KeyModels{"scenario": newScenario1}) assert.NoError(t, err) // try to POST a malformed scenario @@ -150,7 +157,7 @@ func TestAddScenario(t *testing.T) { // try to add scenario as guest user // should return an unprocessable entity error code, resp, err = helper.TestEndpoint(router, token, - "/api/scenarios", "POST", helper.KeyModels{"scenario": newScenario}) + "/api/scenarios", "POST", helper.KeyModels{"scenario": newScenario1}) assert.NoError(t, err) assert.Equalf(t, 422, code, "Response body: \n%v\n", resp) @@ -190,18 +197,13 @@ func TestUpdateScenario(t *testing.T) { assert.NoError(t, err) // test POST scenarios/ $newScenario - newScenario := ScenarioRequest{ - Name: helper.ScenarioA.Name, - Running: helper.ScenarioA.Running, - StartParameters: helper.ScenarioA.StartParameters, - } code, resp, err := helper.TestEndpoint(router, token, - "/api/scenarios", "POST", helper.KeyModels{"scenario": newScenario}) + "/api/scenarios", "POST", helper.KeyModels{"scenario": newScenario1}) assert.NoError(t, err) assert.Equalf(t, 200, code, "Response body: \n%v\n", resp) // Compare POST's response with the newScenario - err = helper.CompareResponse(resp, helper.KeyModels{"scenario": newScenario}) + err = helper.CompareResponse(resp, helper.KeyModels{"scenario": newScenario1}) assert.NoError(t, err) // Read newScenario's ID from the response @@ -269,14 +271,9 @@ func TestGetAllScenariosAsAdmin(t *testing.T) { "/api/authenticate", "POST", helper.UserBCredentials) assert.NoError(t, err) - // test POST scenarios/ $newScenarioB - newScenarioB := ScenarioRequest{ - Name: helper.ScenarioB.Name, - Running: helper.ScenarioB.Running, - StartParameters: helper.ScenarioB.StartParameters, - } + // test POST scenarios/ $newScenario1 code, resp, err := helper.TestEndpoint(router, token, - "/api/scenarios", "POST", helper.KeyModels{"scenario": newScenarioB}) + "/api/scenarios", "POST", helper.KeyModels{"scenario": newScenario1}) assert.NoError(t, err) assert.Equalf(t, 200, code, "Response body: \n%v\n", resp) @@ -285,14 +282,9 @@ func TestGetAllScenariosAsAdmin(t *testing.T) { "/api/authenticate", "POST", helper.UserACredentials) assert.NoError(t, err) - // test POST scenarios/ $newScenarioA - newScenarioA := ScenarioRequest{ - Name: helper.ScenarioA.Name, - Running: helper.ScenarioA.Running, - StartParameters: helper.ScenarioA.StartParameters, - } + // test POST scenarios/ $newScenario2 code, resp, err = helper.TestEndpoint(router, token, - "/api/scenarios", "POST", helper.KeyModels{"scenario": newScenarioA}) + "/api/scenarios", "POST", helper.KeyModels{"scenario": newScenario2}) assert.NoError(t, err) assert.Equalf(t, 200, code, "Response body: \n%v\n", resp) @@ -325,15 +317,9 @@ func TestGetAllScenariosAsUser(t *testing.T) { "/api/scenarios", "GET", nil) assert.NoError(t, err) - // test POST scenarios/ $newScenarioB - newScenarioB := ScenarioRequest{ - Name: helper.ScenarioB.Name, - Running: helper.ScenarioB.Running, - StartParameters: helper.ScenarioB.StartParameters, - } - + // test POST scenarios/ $newScenario2 code, resp, err := helper.TestEndpoint(router, token, - "/api/scenarios", "POST", helper.KeyModels{"scenario": newScenarioB}) + "/api/scenarios", "POST", helper.KeyModels{"scenario": newScenario2}) assert.NoError(t, err) assert.Equalf(t, 200, code, "Response body: \n%v\n", resp) @@ -342,14 +328,9 @@ func TestGetAllScenariosAsUser(t *testing.T) { "/api/authenticate", "POST", helper.UserACredentials) assert.NoError(t, err) - // test POST scenarios/ $newScenarioA - newScenarioA := ScenarioRequest{ - Name: helper.ScenarioA.Name, - Running: helper.ScenarioA.Running, - StartParameters: helper.ScenarioA.StartParameters, - } + // test POST scenarios/ $newScenario1 code, resp, err = helper.TestEndpoint(router, token, - "/api/scenarios", "POST", helper.KeyModels{"scenario": newScenarioA}) + "/api/scenarios", "POST", helper.KeyModels{"scenario": newScenario1}) assert.NoError(t, err) assert.Equalf(t, 200, code, "Response body: \n%v\n", resp) @@ -378,13 +359,8 @@ func TestDeleteScenario(t *testing.T) { assert.NoError(t, err) // test POST scenarios/ $newScenario - newScenario := ScenarioRequest{ - Name: helper.ScenarioA.Name, - Running: helper.ScenarioA.Running, - StartParameters: helper.ScenarioA.StartParameters, - } code, resp, err := helper.TestEndpoint(router, token, - "/api/scenarios", "POST", helper.KeyModels{"scenario": newScenario}) + "/api/scenarios", "POST", helper.KeyModels{"scenario": newScenario1}) assert.NoError(t, err) assert.Equalf(t, 200, code, "Response body: \n%v\n", resp) @@ -427,7 +403,7 @@ func TestDeleteScenario(t *testing.T) { assert.Equalf(t, 200, code, "Response body: \n%v\n", resp) // Compare DELETE's response with the newScenario - err = helper.CompareResponse(resp, helper.KeyModels{"scenario": newScenario}) + err = helper.CompareResponse(resp, helper.KeyModels{"scenario": newScenario1}) assert.NoError(t, err) // Again count the number of all the scenarios returned @@ -450,13 +426,8 @@ func TestAddUserToScenario(t *testing.T) { assert.NoError(t, err) // test POST scenarios/ $newScenario - newScenario := ScenarioRequest{ - Name: helper.ScenarioA.Name, - Running: helper.ScenarioA.Running, - StartParameters: helper.ScenarioA.StartParameters, - } code, resp, err := helper.TestEndpoint(router, token, - "/api/scenarios", "POST", helper.KeyModels{"scenario": newScenario}) + "/api/scenarios", "POST", helper.KeyModels{"scenario": newScenario1}) assert.NoError(t, err) assert.Equalf(t, 200, code, "Response body: \n%v\n", resp) @@ -535,13 +506,8 @@ func TestGetAllUsersOfScenario(t *testing.T) { assert.NoError(t, err) // test POST scenarios/ $newScenario - newScenario := ScenarioRequest{ - Name: helper.ScenarioA.Name, - Running: helper.ScenarioA.Running, - StartParameters: helper.ScenarioA.StartParameters, - } code, resp, err := helper.TestEndpoint(router, token, - "/api/scenarios", "POST", helper.KeyModels{"scenario": newScenario}) + "/api/scenarios", "POST", helper.KeyModels{"scenario": newScenario1}) assert.NoError(t, err) assert.Equalf(t, 200, code, "Response body: \n%v\n", resp) @@ -620,13 +586,8 @@ func TestRemoveUserFromScenario(t *testing.T) { assert.NoError(t, err) // test POST scenarios/ $newScenario - newScenario := ScenarioRequest{ - Name: helper.ScenarioA.Name, - Running: helper.ScenarioA.Running, - StartParameters: helper.ScenarioA.StartParameters, - } code, resp, err := helper.TestEndpoint(router, token, - "/api/scenarios", "POST", helper.KeyModels{"scenario": newScenario}) + "/api/scenarios", "POST", helper.KeyModels{"scenario": newScenario1}) assert.NoError(t, err) assert.Equalf(t, 200, code, "Response body: \n%v\n", resp)