From 620aff8f474440fadc17ec61864a85445f5faaba Mon Sep 17 00:00:00 2001 From: Sergey Yakubov <sergey.yakubov@desy.de> Date: Fri, 14 Jun 2019 16:19:36 +0200 Subject: [PATCH] started working at broker --- broker/src/asapo_broker/database/database.go | 2 +- .../asapo_broker/database/mock_database.go | 4 +- broker/src/asapo_broker/database/mongodb.go | 23 ++++++---- .../src/asapo_broker/database/mongodb_test.go | 39 +++++++++-------- broker/src/asapo_broker/server/get_id.go | 8 ++-- broker/src/asapo_broker/server/get_id_test.go | 4 +- broker/src/asapo_broker/server/get_last.go | 2 +- .../src/asapo_broker/server/get_last_test.go | 2 +- .../src/asapo_broker/server/get_meta_test.go | 2 +- broker/src/asapo_broker/server/get_next.go | 2 +- .../src/asapo_broker/server/get_next_test.go | 2 +- broker/src/asapo_broker/server/get_size.go | 2 +- .../src/asapo_broker/server/get_size_test.go | 2 +- broker/src/asapo_broker/server/listroutes.go | 6 +++ .../asapo_broker/server/post_query_images.go | 16 +++++++ .../server/post_query_images_test.go | 43 +++++++++++++++++++ .../asapo_broker/server/post_reset_counter.go | 2 +- .../server/post_reset_counter_test.go | 2 +- .../asapo_broker/server/process_request.go | 8 ++-- .../server/process_request_test.go | 19 +++++--- 20 files changed, 133 insertions(+), 57 deletions(-) create mode 100644 broker/src/asapo_broker/server/post_query_images.go create mode 100644 broker/src/asapo_broker/server/post_query_images_test.go diff --git a/broker/src/asapo_broker/database/database.go b/broker/src/asapo_broker/database/database.go index 5512b8ee8..81cbb2d54 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 eaa756192..97570e51b 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 bf46a66a8..b66726212 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 bb200d7f2..3d712557e 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 da4fd7ee4..5eea8aea3 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 3330c8184..658a58713 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 414540ba0..5b0bcd616 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 3b6673ff8..08e3a7848 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 6b07de63e..958b6e73b 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 5456d4c4c..dc66ce677 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 5418327d9..e76473726 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 963e74826..fa4dd2367 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 739abe27a..642b2d700 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 f56310e24..c47784482 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 000000000..4d33c2358 --- /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 000000000..f52771a69 --- /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 d93b600ad..fd881f72f 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 8db63c421..d2d69edf8 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 0e4f37903..3cede6c00 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 694a05edc..727f2aa3e 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) -- GitLab