diff --git a/broker/src/asapo_broker/database/database.go b/broker/src/asapo_broker/database/database.go index 5512b8ee8bb3a4a59e0584b143dbd9a3338e902f..81cbb2d54e48345558f62f1a3c090a1021a9eefc 100644 --- a/broker/src/asapo_broker/database/database.go +++ b/broker/src/asapo_broker/database/database.go @@ -1,7 +1,7 @@ package database type Agent interface { - ProcessRequest(db_name string, group_id string, op string, id int) ([]byte, error) + ProcessRequest(db_name string, group_id string, op string, extra string) ([]byte, error) Connect(string) error Close() Copy() Agent diff --git a/broker/src/asapo_broker/database/mock_database.go b/broker/src/asapo_broker/database/mock_database.go index eaa75619237b2af2e573bf72813d3f003b8c7db8..97570e51bf5e75c19fd9daf2f7ec4162173f4725 100644 --- a/broker/src/asapo_broker/database/mock_database.go +++ b/broker/src/asapo_broker/database/mock_database.go @@ -24,7 +24,7 @@ func (db *MockedDatabase) Copy() Agent { return db } -func (db *MockedDatabase) ProcessRequest(db_name string, group_id string, op string, id int) (answer []byte, err error) { - args := db.Called(db_name, group_id, op, id) +func (db *MockedDatabase) ProcessRequest(db_name string, group_id string, op string, extra_param string) (answer []byte, err error) { + args := db.Called(db_name, group_id, op, extra_param) return args.Get(0).([]byte), args.Error(1) } diff --git a/broker/src/asapo_broker/database/mongodb.go b/broker/src/asapo_broker/database/mongodb.go index bf46a66a83045e5b4bd3add146a87b635268a870..b66726212473e621281f377899551a2b191e3b8f 100644 --- a/broker/src/asapo_broker/database/mongodb.go +++ b/broker/src/asapo_broker/database/mongodb.go @@ -177,7 +177,6 @@ func (db *Mongodb) incrementField(dbname string, group_id string, max_ind int, r } func (db *Mongodb) GetRecordByIDRow(dbname string, id int, returnID bool) ([]byte, error) { - var res map[string]interface{} q := bson.M{"_id": id} c := db.session.DB(dbname).C(data_collection_name) @@ -201,7 +200,11 @@ func (db *Mongodb) GetRecordByIDRow(dbname string, id int, returnID bool) ([]byt return utils.MapToJson(&res) } -func (db *Mongodb) GetRecordByID(dbname string, group_id string, id int, returnID bool, reset bool) ([]byte, error) { +func (db *Mongodb) GetRecordByID(dbname string, group_id string, id_str string, returnID bool, reset bool) ([]byte, error) { + id, err := strconv.Atoi(id_str) + if err != nil { + return nil, err + } if err := db.checkDatabaseOperationPrerequisites(dbname, group_id); err != nil { return nil, err @@ -339,12 +342,16 @@ func (db *Mongodb) ResetCounter(db_name string, group_id string) ([]byte, error) return []byte(""), err } -func (db *Mongodb) getMeta(dbname string, id int) ([]byte, error) { +func (db *Mongodb) getMeta(dbname string, id_str string) ([]byte, error) { + id, err := strconv.Atoi(id_str) + if err != nil { + return nil, err + } var res map[string]interface{} q := bson.M{"_id": id} c := db.session.DB(dbname).C(meta_collection_name) - err := c.Find(q).One(&res) + err = c.Find(q).One(&res) if err != nil { log_str := "error getting meta with id " + strconv.Itoa(id) + " for " + dbname + " : " + err.Error() logger.Debug(log_str) @@ -356,14 +363,14 @@ func (db *Mongodb) getMeta(dbname string, id int) ([]byte, error) { return utils.MapToJson(&res) } -func (db *Mongodb) ProcessRequest(db_name string, group_id string, op string, id int) (answer []byte, err error) { +func (db *Mongodb) ProcessRequest(db_name string, group_id string, op string, extra_param string) (answer []byte, err error) { switch op { case "next": return db.GetNextRecord(db_name, group_id) case "id": - return db.GetRecordByID(db_name, group_id, id, true, false) + return db.GetRecordByID(db_name, group_id, extra_param, true, false) case "idreset": - return db.GetRecordByID(db_name, group_id, id, true, true) + return db.GetRecordByID(db_name, group_id, extra_param, true, true) case "last": return db.GetLastRecord(db_name, group_id) case "resetcounter": @@ -371,7 +378,7 @@ func (db *Mongodb) ProcessRequest(db_name string, group_id string, op string, id case "size": return db.GetSize(db_name) case "meta": - return db.getMeta(db_name, id) + return db.getMeta(db_name, extra_param) } diff --git a/broker/src/asapo_broker/database/mongodb_test.go b/broker/src/asapo_broker/database/mongodb_test.go index bb200d7f2dae131e49ea8bfca11c0076cacd0e89..3d712557e81355123c6965c65a92e87e18522b76 100644 --- a/broker/src/asapo_broker/database/mongodb_test.go +++ b/broker/src/asapo_broker/database/mongodb_test.go @@ -21,6 +21,7 @@ const dbname = "run1" const dbaddress = "127.0.0.1:27017" const groupId = "bid2a5auidddp1vl71d0" const metaID = 0 +const metaID_str = "0" var rec1 = TestRecord{1, "aaa"} var rec2 = TestRecord{2, "bbb"} @@ -166,7 +167,7 @@ func TestMongoDBGetRecordByID(t *testing.T) { db.Connect(dbaddress) defer cleanup() db.InsertRecord(dbname, &rec1) - res, err := db.GetRecordByID(dbname, "", 1, true, false) + res, err := db.GetRecordByID(dbname, "", "1", true, false) assert.Nil(t, err) assert.Equal(t, string(rec1_expect), string(res)) } @@ -175,7 +176,7 @@ func TestMongoDBGetRecordByIDFails(t *testing.T) { db.Connect(dbaddress) defer cleanup() db.InsertRecord(dbname, &rec1) - _, err := db.GetRecordByID(dbname, "", 2, true, false) + _, err := db.GetRecordByID(dbname, "", "2", true, false) assert.Equal(t, utils.StatusNoData, err.(*DBError).Code) assert.Equal(t, "{\"id\":2}", err.Error()) } @@ -184,7 +185,7 @@ func TestMongoDBGetRecordNext(t *testing.T) { db.Connect(dbaddress) defer cleanup() db.InsertRecord(dbname, &rec1) - res, err := db.ProcessRequest(dbname, groupId, "next", 0) + res, err := db.ProcessRequest(dbname, groupId, "next", "0") assert.Nil(t, err) assert.Equal(t, string(rec1_expect), string(res)) } @@ -193,7 +194,7 @@ func TestMongoDBGetRecordID(t *testing.T) { db.Connect(dbaddress) defer cleanup() db.InsertRecord(dbname, &rec1) - res, err := db.ProcessRequest(dbname, groupId, "id", 1) + res, err := db.ProcessRequest(dbname, groupId, "id", "1") assert.Nil(t, err) assert.Equal(t, string(rec1_expect), string(res)) } @@ -202,7 +203,7 @@ func TestMongoDBWrongOp(t *testing.T) { db.Connect(dbaddress) defer cleanup() db.InsertRecord(dbname, &rec1) - _, err := db.ProcessRequest(dbname, groupId, "bla", 0) + _, err := db.ProcessRequest(dbname, groupId, "bla", "0") assert.NotNil(t, err) } @@ -212,7 +213,7 @@ func TestMongoDBGetRecordLast(t *testing.T) { db.InsertRecord(dbname, &rec1) db.InsertRecord(dbname, &rec2) - res, err := db.ProcessRequest(dbname, groupId, "last", 0) + res, err := db.ProcessRequest(dbname, groupId, "last", "0") assert.Nil(t, err) assert.Equal(t, string(rec2_expect), string(res)) } @@ -223,13 +224,13 @@ func TestMongoDBGetNextAfterGetLastCorrect(t *testing.T) { db.InsertRecord(dbname, &rec1) db.InsertRecord(dbname, &rec2) - res, err := db.ProcessRequest(dbname, groupId, "last", 0) + res, err := db.ProcessRequest(dbname, groupId, "last", "0") assert.Nil(t, err) assert.Equal(t, string(rec2_expect), string(res)) db.InsertRecord(dbname, &rec3) - res, err = db.ProcessRequest(dbname, groupId, "next", 0) + res, err = db.ProcessRequest(dbname, groupId, "next", "0") assert.Nil(t, err) assert.Equal(t, string(rec3_expect), string(res)) @@ -242,7 +243,7 @@ func TestMongoDBGetSize(t *testing.T) { db.InsertRecord(dbname, &rec2) db.InsertRecord(dbname, &rec3) - res, err := db.ProcessRequest(dbname, "", "size", 0) + res, err := db.ProcessRequest(dbname, "", "size", "0") assert.Nil(t, err) assert.Equal(t, string(recs1_expect), string(res)) } @@ -254,7 +255,7 @@ func TestMongoDBGetSizeNoRecords(t *testing.T) { db.InsertRecord(dbname, &rec1) db.session.DB(dbname).C(data_collection_name).RemoveId(1) - res, err := db.ProcessRequest(dbname, "", "size", 0) + res, err := db.ProcessRequest(dbname, "", "size", "0") assert.Nil(t, err) assert.Equal(t, string(recs2_expect), string(res)) } @@ -262,7 +263,7 @@ func TestMongoDBGetSizeNoRecords(t *testing.T) { func TestMongoDBGetSizeNoDatabase(t *testing.T) { db.Connect(dbaddress) defer cleanup() - _, err := db.ProcessRequest(dbname, "", "size", 0) + _, err := db.ProcessRequest(dbname, "", "size", "0") assert.NotNil(t, err) } @@ -272,8 +273,8 @@ func TestMongoDBGetRecordIDWithReset(t *testing.T) { db.InsertRecord(dbname, &rec1) db.InsertRecord(dbname, &rec2) - res1, err1 := db.ProcessRequest(dbname, groupId, "idreset", 1) - res2, err2 := db.ProcessRequest(dbname, groupId, "next", 0) + res1, err1 := db.ProcessRequest(dbname, groupId, "idreset", "1") + res2, err2 := db.ProcessRequest(dbname, groupId, "next", "0") assert.Nil(t, err1) assert.Equal(t, string(rec1_expect), string(res1)) @@ -283,7 +284,7 @@ func TestMongoDBGetRecordIDWithReset(t *testing.T) { } func TestMongoDBGetRecordByIDNotConnected(t *testing.T) { - _, err := db.GetRecordByID(dbname, "", 2, true, false) + _, err := db.GetRecordByID(dbname, "", "2", true, false) assert.Equal(t, utils.StatusError, err.(*DBError).Code) } @@ -293,15 +294,15 @@ func TestMongoDBResetCounter(t *testing.T) { db.InsertRecord(dbname, &rec1) db.InsertRecord(dbname, &rec2) - res1, err1 := db.ProcessRequest(dbname, groupId, "next", 0) + res1, err1 := db.ProcessRequest(dbname, groupId, "next", "0") assert.Nil(t, err1) assert.Equal(t, string(rec1_expect), string(res1)) - _, err_reset := db.ProcessRequest(dbname, groupId, "resetcounter", 0) + _, err_reset := db.ProcessRequest(dbname, groupId, "resetcounter", "0") assert.Nil(t, err_reset) - res2, err2 := db.ProcessRequest(dbname, groupId, "next", 0) + res2, err2 := db.ProcessRequest(dbname, groupId, "next", "0") assert.Nil(t, err2) assert.Equal(t, string(rec1_expect), string(res2)) @@ -315,7 +316,7 @@ func TestMongoDBGetMetaOK(t *testing.T) { rec_expect, _ := json.Marshal(rec1) db.InsertMeta(dbname, &rec1) - res, err := db.ProcessRequest(dbname, "", "meta", metaID) + res, err := db.ProcessRequest(dbname, "", "meta", metaID_str) assert.Nil(t, err) assert.Equal(t, string(rec_expect), string(res)) @@ -325,6 +326,6 @@ func TestMongoDBGetMetaErr(t *testing.T) { db.Connect(dbaddress) defer cleanup() - _, err := db.ProcessRequest(dbname, "", "meta", metaID) + _, err := db.ProcessRequest(dbname, "", "meta", metaID_str) assert.NotNil(t, err) } diff --git a/broker/src/asapo_broker/server/get_id.go b/broker/src/asapo_broker/server/get_id.go index da4fd7ee4aedf0403b5db8c2c32ef086dd16d195..5eea8aea38e8e03ebde445266fa4c5f326a9c805 100644 --- a/broker/src/asapo_broker/server/get_id.go +++ b/broker/src/asapo_broker/server/get_id.go @@ -3,17 +3,15 @@ package server import ( "github.com/gorilla/mux" "net/http" - "strconv" ) -func extractRequestParametersID(r *http.Request) (int, bool) { +func extractRequestParametersID(r *http.Request) (string, bool) { vars := mux.Vars(r) id_str, ok := vars["id"] if !ok { - return 0, ok + return "0", ok } - id, err := strconv.Atoi(id_str) - return id, err == nil + return id_str, true } func routeGetByID(w http.ResponseWriter, r *http.Request) { diff --git a/broker/src/asapo_broker/server/get_id_test.go b/broker/src/asapo_broker/server/get_id_test.go index 3330c81846b0d18655bc8572a4fff51f4ca61231..658a5871306d44de75eb40743f393e4e740b2e2f 100644 --- a/broker/src/asapo_broker/server/get_id_test.go +++ b/broker/src/asapo_broker/server/get_id_test.go @@ -45,7 +45,7 @@ func TestGetIDTestSuite(t *testing.T) { } func (suite *GetIDTestSuite) TestGetIdCallsCorrectRoutine() { - suite.mock_db.On("ProcessRequest", expectedBeamtimeId, expectedGroupID, "id", 1).Return([]byte("Hello"), nil) + suite.mock_db.On("ProcessRequest", expectedBeamtimeId, expectedGroupID, "id", "1").Return([]byte("Hello"), nil) logger.MockLog.On("Debug", mock.MatchedBy(containsMatcher("processing request"))) ExpectCopyClose(suite.mock_db) @@ -55,7 +55,7 @@ func (suite *GetIDTestSuite) TestGetIdCallsCorrectRoutine() { } func (suite *GetIDTestSuite) TestGetIdWithResetCallsCorrectRoutine() { - suite.mock_db.On("ProcessRequest", expectedBeamtimeId, expectedGroupID, "idreset", 1).Return([]byte("Hello"), nil) + suite.mock_db.On("ProcessRequest", expectedBeamtimeId, expectedGroupID, "idreset", "1").Return([]byte("Hello"), nil) logger.MockLog.On("Debug", mock.MatchedBy(containsMatcher("processing request"))) ExpectCopyClose(suite.mock_db) diff --git a/broker/src/asapo_broker/server/get_last.go b/broker/src/asapo_broker/server/get_last.go index 414540ba08de4eb45e53d966f466a2e1fca4f48f..5b0bcd616547aeec3f119fa8f7b5e40186111265 100644 --- a/broker/src/asapo_broker/server/get_last.go +++ b/broker/src/asapo_broker/server/get_last.go @@ -5,5 +5,5 @@ import ( ) func routeGetLast(w http.ResponseWriter, r *http.Request) { - processRequest(w, r, "last", 0, true) + processRequest(w, r, "last", "0", true) } diff --git a/broker/src/asapo_broker/server/get_last_test.go b/broker/src/asapo_broker/server/get_last_test.go index 3b6673ff8e6dd97cb17250d6e17618d7de3d56ed..08e3a7848a5e08a0e0837f211f9e8d132104431e 100644 --- a/broker/src/asapo_broker/server/get_last_test.go +++ b/broker/src/asapo_broker/server/get_last_test.go @@ -33,7 +33,7 @@ func TestGetLastTestSuite(t *testing.T) { } func (suite *GetLastTestSuite) TestGetLastCallsCorrectRoutine() { - suite.mock_db.On("ProcessRequest", expectedBeamtimeId, expectedGroupID, "last", 0).Return([]byte("Hello"), nil) + suite.mock_db.On("ProcessRequest", expectedBeamtimeId, expectedGroupID, "last", "0").Return([]byte("Hello"), nil) logger.MockLog.On("Debug", mock.MatchedBy(containsMatcher("processing request last"))) ExpectCopyClose(suite.mock_db) diff --git a/broker/src/asapo_broker/server/get_meta_test.go b/broker/src/asapo_broker/server/get_meta_test.go index 6b07de63e31410a23fda301b836935dbf4aafadd..958b6e73b00214f984d78cf25aeefbb297fc55ac 100644 --- a/broker/src/asapo_broker/server/get_meta_test.go +++ b/broker/src/asapo_broker/server/get_meta_test.go @@ -33,7 +33,7 @@ func TestGetMetaTestSuite(t *testing.T) { } func (suite *GetMetaTestSuite) TestGetMetaOK() { - suite.mock_db.On("ProcessRequest", expectedBeamtimeId, "", "meta", 0).Return([]byte("{\"test\":10}"), nil) + suite.mock_db.On("ProcessRequest", expectedBeamtimeId, "", "meta", "0").Return([]byte("{\"test\":10}"), nil) logger.MockLog.On("Debug", mock.MatchedBy(containsMatcher("processing request meta"))) ExpectCopyClose(suite.mock_db) diff --git a/broker/src/asapo_broker/server/get_next.go b/broker/src/asapo_broker/server/get_next.go index 5456d4c4c31c674b2e6c8870ec8299700fb4bc07..dc66ce677d872e3700d343739ca7b487d4577800 100644 --- a/broker/src/asapo_broker/server/get_next.go +++ b/broker/src/asapo_broker/server/get_next.go @@ -5,5 +5,5 @@ import ( ) func routeGetNext(w http.ResponseWriter, r *http.Request) { - processRequest(w, r, "next", 0, true) + processRequest(w, r, "next", "0", true) } diff --git a/broker/src/asapo_broker/server/get_next_test.go b/broker/src/asapo_broker/server/get_next_test.go index 5418327d9a54ff08670a54a5f8bee3b67854f04c..e7647372644259cd28a8fd70bdd5d51d1d780d47 100644 --- a/broker/src/asapo_broker/server/get_next_test.go +++ b/broker/src/asapo_broker/server/get_next_test.go @@ -33,7 +33,7 @@ func TestGetNextTestSuite(t *testing.T) { } func (suite *GetNextTestSuite) TestGetNextCallsCorrectRoutine() { - suite.mock_db.On("ProcessRequest", expectedBeamtimeId, expectedGroupID, "next", 0).Return([]byte("Hello"), nil) + suite.mock_db.On("ProcessRequest", expectedBeamtimeId, expectedGroupID, "next", "0").Return([]byte("Hello"), nil) logger.MockLog.On("Debug", mock.MatchedBy(containsMatcher("processing request next"))) ExpectCopyClose(suite.mock_db) diff --git a/broker/src/asapo_broker/server/get_size.go b/broker/src/asapo_broker/server/get_size.go index 963e74826ae2bfb10edd071ce82c9448daaebc72..fa4dd2367cf8a1115e6c740e060f6a4ff3680a7a 100644 --- a/broker/src/asapo_broker/server/get_size.go +++ b/broker/src/asapo_broker/server/get_size.go @@ -5,5 +5,5 @@ import ( ) func routeGetSize(w http.ResponseWriter, r *http.Request) { - processRequest(w, r, "size", 0, false) + processRequest(w, r, "size", "0", false) } diff --git a/broker/src/asapo_broker/server/get_size_test.go b/broker/src/asapo_broker/server/get_size_test.go index 739abe27a8c2320a9cd392325d70367f91e70c5a..642b2d7003333e626ea91c8aa6985c538a48bad9 100644 --- a/broker/src/asapo_broker/server/get_size_test.go +++ b/broker/src/asapo_broker/server/get_size_test.go @@ -33,7 +33,7 @@ func TestGetSizeTestSuite(t *testing.T) { } func (suite *GetSizeTestSuite) TestGetSizeOK() { - suite.mock_db.On("ProcessRequest", expectedBeamtimeId, "", "size", 0).Return([]byte("{\"size\":10}"), nil) + suite.mock_db.On("ProcessRequest", expectedBeamtimeId, "", "size", "0").Return([]byte("{\"size\":10}"), nil) logger.MockLog.On("Debug", mock.MatchedBy(containsMatcher("processing request size"))) ExpectCopyClose(suite.mock_db) diff --git a/broker/src/asapo_broker/server/listroutes.go b/broker/src/asapo_broker/server/listroutes.go index f56310e24193032db17e49f160a730982c875425..c477844826d6adfc5b4a2003723fbf2a39b3de35 100644 --- a/broker/src/asapo_broker/server/listroutes.go +++ b/broker/src/asapo_broker/server/listroutes.go @@ -41,6 +41,12 @@ var listRoutes = utils.Routes{ "/creategroup", routeCreateGroupID, }, + utils.Route{ + "QueryImages", + "Post", + "/database/{dbname}/0/queryimages", + routeQueryImages, + }, utils.Route{ "ResetCounter", "Post", diff --git a/broker/src/asapo_broker/server/post_query_images.go b/broker/src/asapo_broker/server/post_query_images.go new file mode 100644 index 0000000000000000000000000000000000000000..4d33c23588e4430bfd3154cd035488bd26417c08 --- /dev/null +++ b/broker/src/asapo_broker/server/post_query_images.go @@ -0,0 +1,16 @@ +package server + +import ( + "io/ioutil" + "net/http" +) + +func routeQueryImages(w http.ResponseWriter, r *http.Request) { + body, err := ioutil.ReadAll(r.Body) + if err != nil { + http.Error(w, err.Error(), 500) + return + } + + processRequest(w, r, "queryimages", string(body), false) +} diff --git a/broker/src/asapo_broker/server/post_query_images_test.go b/broker/src/asapo_broker/server/post_query_images_test.go new file mode 100644 index 0000000000000000000000000000000000000000..f52771a695736215a95a87b9243324bd39f30d95 --- /dev/null +++ b/broker/src/asapo_broker/server/post_query_images_test.go @@ -0,0 +1,43 @@ +package server + +import ( + "asapo_broker/database" + "asapo_common/logger" + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/suite" + "net/http" + "testing" +) + +type QueryTestSuite struct { + suite.Suite + mock_db *database.MockedDatabase +} + +func (suite *QueryTestSuite) SetupTest() { + statistics.Reset() + suite.mock_db = new(database.MockedDatabase) + db = suite.mock_db + prepareTestAuth() + logger.SetMockLog() +} + +func (suite *QueryTestSuite) TearDownTest() { + assertExpectations(suite.T(), suite.mock_db) + logger.UnsetMockLog() + db = nil +} + +func TestQueryTestSuite(t *testing.T) { + suite.Run(t, new(QueryTestSuite)) +} + +func (suite *QueryTestSuite) TestQueryOK() { + query_str := "aaaa" + suite.mock_db.On("ProcessRequest", expectedBeamtimeId, "", "queryimages", query_str).Return([]byte("{}"), nil) + logger.MockLog.On("Debug", mock.MatchedBy(containsMatcher("processing request queryimages"))) + ExpectCopyClose(suite.mock_db) + + w := doRequest("/database/"+expectedBeamtimeId+"/0/queryimages"+correctTokenSuffix, "POST", query_str) + suite.Equal(http.StatusOK, w.Code, "Query OK") +} diff --git a/broker/src/asapo_broker/server/post_reset_counter.go b/broker/src/asapo_broker/server/post_reset_counter.go index d93b600adf03d7c555ef1891075c40bb596f9c50..fd881f72f1fb81596077ae08f80f69888c9ad9d3 100644 --- a/broker/src/asapo_broker/server/post_reset_counter.go +++ b/broker/src/asapo_broker/server/post_reset_counter.go @@ -5,5 +5,5 @@ import ( ) func routeResetCounter(w http.ResponseWriter, r *http.Request) { - processRequest(w, r, "resetcounter", 0, true) + processRequest(w, r, "resetcounter", "0", true) } diff --git a/broker/src/asapo_broker/server/post_reset_counter_test.go b/broker/src/asapo_broker/server/post_reset_counter_test.go index 8db63c42189fea75db6715bc8ba11c1f586d6dc6..d2d69edf874d67f28a9c6fe4350c6be8a6c29fdd 100644 --- a/broker/src/asapo_broker/server/post_reset_counter_test.go +++ b/broker/src/asapo_broker/server/post_reset_counter_test.go @@ -33,7 +33,7 @@ func TestResetCounterTestSuite(t *testing.T) { } func (suite *ResetCounterTestSuite) TestResetCounterOK() { - suite.mock_db.On("ProcessRequest", expectedBeamtimeId, expectedGroupID, "resetcounter", 0).Return([]byte(""), nil) + suite.mock_db.On("ProcessRequest", expectedBeamtimeId, expectedGroupID, "resetcounter", "0").Return([]byte(""), nil) logger.MockLog.On("Debug", mock.MatchedBy(containsMatcher("processing request resetcounter"))) ExpectCopyClose(suite.mock_db) diff --git a/broker/src/asapo_broker/server/process_request.go b/broker/src/asapo_broker/server/process_request.go index 0e4f379037b362e482a37c76deca6528465dc9c8..3cede6c0014d855064980565dce4ca584fefb5f1 100644 --- a/broker/src/asapo_broker/server/process_request.go +++ b/broker/src/asapo_broker/server/process_request.go @@ -37,7 +37,7 @@ func checkGroupID(w http.ResponseWriter, needGroupID bool, group_id string, db_n return true } -func processRequest(w http.ResponseWriter, r *http.Request, op string, id int, needGroupID bool) { +func processRequest(w http.ResponseWriter, r *http.Request, op string, extra_param string, needGroupID bool) { r.Header.Set("Content-type", "application/json") w.Header().Set("Access-Control-Allow-Origin", "*") db_name, group_id, ok := extractRequestParameters(r, needGroupID) @@ -59,7 +59,7 @@ func processRequest(w http.ResponseWriter, r *http.Request, op string, id int, n op = "idreset" } - answer, code := processRequestInDb(db_name, group_id, op, id) + answer, code := processRequestInDb(db_name, group_id, op, extra_param) w.WriteHeader(code) w.Write(answer) } @@ -78,11 +78,11 @@ func returnError(err error, log_str string) (answer []byte, code int) { return []byte(err.Error()), code } -func processRequestInDb(db_name string, group_id string, op string, id int) (answer []byte, code int) { +func processRequestInDb(db_name string, group_id string, op string, extra_param string) (answer []byte, code int) { db_new := db.Copy() defer db_new.Close() statistics.IncreaseCounter() - answer, err := db_new.ProcessRequest(db_name, group_id, op, id) + answer, err := db_new.ProcessRequest(db_name, group_id, op, extra_param) log_str := "processing request " + op + " in " + db_name + " at " + settings.BrokerDbAddress if err != nil { return returnError(err, log_str) diff --git a/broker/src/asapo_broker/server/process_request_test.go b/broker/src/asapo_broker/server/process_request_test.go index 694a05edc4fe7b33eb8d0d49c562ad0b591d11c5..727f2aa3e68d190874ecd206f90863887832d6ef 100644 --- a/broker/src/asapo_broker/server/process_request_test.go +++ b/broker/src/asapo_broker/server/process_request_test.go @@ -8,6 +8,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" "github.com/stretchr/testify/suite" + "io" "net/http" "net/http/httptest" "strings" @@ -49,14 +50,18 @@ func containsMatcher(substrings ...string) func(str string) bool { } } -func doRequest(path string, method ...string) *httptest.ResponseRecorder { +func doRequest(path string, extra_params ...string) *httptest.ResponseRecorder { m := "GET" - if len(method) > 0 { - m = method[0] + if len(extra_params) > 0 { + m = extra_params[0] + } + var body io.Reader = nil + if len(extra_params) > 1 { + body = strings.NewReader(extra_params[1]) } mux := utils.NewRouter(listRoutes) - req, _ := http.NewRequest(m, path, nil) + req, _ := http.NewRequest(m, path, body) w := httptest.NewRecorder() mux.ServeHTTP(w, req) return w @@ -112,7 +117,7 @@ func (suite *ProcessRequestTestSuite) TestProcessRequestWithNoToken() { } func (suite *ProcessRequestTestSuite) TestProcessRequestWithWrongDatabaseName() { - suite.mock_db.On("ProcessRequest", expectedBeamtimeId, expectedGroupID, "next", 0).Return([]byte(""), + suite.mock_db.On("ProcessRequest", expectedBeamtimeId, expectedGroupID, "next", "0").Return([]byte(""), &database.DBError{utils.StatusWrongInput, ""}) logger.MockLog.On("Error", mock.MatchedBy(containsMatcher("processing request next"))) @@ -124,7 +129,7 @@ func (suite *ProcessRequestTestSuite) TestProcessRequestWithWrongDatabaseName() } func (suite *ProcessRequestTestSuite) TestProcessRequestWithInternalDBError() { - suite.mock_db.On("ProcessRequest", expectedBeamtimeId, expectedGroupID, "next", 0).Return([]byte(""), errors.New("")) + suite.mock_db.On("ProcessRequest", expectedBeamtimeId, expectedGroupID, "next", "0").Return([]byte(""), errors.New("")) logger.MockLog.On("Error", mock.MatchedBy(containsMatcher("processing request next"))) ExpectCopyClose(suite.mock_db) @@ -133,7 +138,7 @@ func (suite *ProcessRequestTestSuite) TestProcessRequestWithInternalDBError() { } func (suite *ProcessRequestTestSuite) TestProcessRequestAddsCounter() { - suite.mock_db.On("ProcessRequest", expectedBeamtimeId, expectedGroupID, "next", 0).Return([]byte("Hello"), nil) + suite.mock_db.On("ProcessRequest", expectedBeamtimeId, expectedGroupID, "next", "0").Return([]byte("Hello"), nil) logger.MockLog.On("Debug", mock.MatchedBy(containsMatcher("processing request next in "+expectedBeamtimeId))) ExpectCopyClose(suite.mock_db)