From eb9dadb4588397853d7bc925badfa6ccefeb70ba Mon Sep 17 00:00:00 2001
From: Sergey Yakubov <sergey.yakubov@desy.de>
Date: Fri, 16 Feb 2018 13:53:09 +0100
Subject: [PATCH] config files for broker

---
 broker/src/hidra2_broker/main/broker.go       | 21 +++++++--
 broker/src/hidra2_broker/server/server.go     |  9 +++-
 .../hidra2_broker/server/server_nottested.go  | 45 ++-----------------
 .../src/hidra2_broker/server/server_test.go   |  4 +-
 broker/src/hidra2_broker/utils/helpers.go     | 18 +++++++-
 examples/worker/getnext_broker/CMakeLists.txt |  1 +
 examples/worker/getnext_broker/check_linux.sh |  2 +-
 .../worker/getnext_broker/check_windows.bat   |  2 +-
 tests/broker/CMakeLists.txt                   |  1 +
 tests/broker/get_next/CMakeLists.txt          |  1 +
 tests/broker/get_next/check_linux.sh          |  3 +-
 tests/broker/get_next/check_windows.bat       |  2 +-
 tests/broker/read_config/CMakeLists.txt       |  9 ++++
 tests/broker/read_config/check_linux.sh       | 15 +++++++
 tests/broker/read_config/check_windows.bat    | 19 ++++++++
 tests/broker/read_config/settings_bad.json    |  4 ++
 tests/settings/broker_settings.json           |  4 ++
 .../next_multithread_broker/CMakeLists.txt    |  1 +
 .../next_multithread_broker/check_linux.sh    |  2 +-
 .../next_multithread_broker/check_windows.bat |  2 +-
 20 files changed, 111 insertions(+), 54 deletions(-)
 create mode 100644 tests/broker/read_config/CMakeLists.txt
 create mode 100644 tests/broker/read_config/check_linux.sh
 create mode 100644 tests/broker/read_config/check_windows.bat
 create mode 100644 tests/broker/read_config/settings_bad.json
 create mode 100644 tests/settings/broker_settings.json

diff --git a/broker/src/hidra2_broker/main/broker.go b/broker/src/hidra2_broker/main/broker.go
index 9e4dc10f7..c72a93a3b 100644
--- a/broker/src/hidra2_broker/main/broker.go
+++ b/broker/src/hidra2_broker/main/broker.go
@@ -6,16 +6,31 @@ import (
 	"hidra2_broker/database"
 	"hidra2_broker/server"
 	"log"
+	"os"
 )
 
 func NewDefaultDatabase() database.Agent {
 	return new(database.Mongodb)
 }
 
+func PrintUsage() {
+	log.Fatal("Usage: " + os.Args[0] + " <config file>")
+}
+
 func main() {
-	err:=server.InitDB(NewDefaultDatabase())
-	if err!= nil {
-	    log.Fatal(err.Error())
+	if len(os.Args) != 2 {
+		PrintUsage()
+	}
+
+	fname := os.Args[1]
+	err := server.ReadConfig(fname)
+	if err != nil {
+		log.Fatal(err.Error())
+	}
+
+	err = server.InitDB(NewDefaultDatabase())
+	if err != nil {
+		log.Fatal(err.Error())
 	}
 	defer server.CleanupDB()
 	server.Start()
diff --git a/broker/src/hidra2_broker/server/server.go b/broker/src/hidra2_broker/server/server.go
index f369c6480..7e85cbca7 100644
--- a/broker/src/hidra2_broker/server/server.go
+++ b/broker/src/hidra2_broker/server/server.go
@@ -6,9 +6,16 @@ import (
 
 var db database.Agent
 
+type serverSettings struct {
+	DbAddress string
+	Port      int
+}
+
+var settings serverSettings
+
 func InitDB(dbAgent database.Agent) error {
 	db = dbAgent
-	return db.Connect("127.0.0.1:27017")
+	return db.Connect(settings.DbAddress)
 }
 
 func CleanupDB() {
diff --git a/broker/src/hidra2_broker/server/server_nottested.go b/broker/src/hidra2_broker/server/server_nottested.go
index 461d25649..cf6bd72f7 100644
--- a/broker/src/hidra2_broker/server/server_nottested.go
+++ b/broker/src/hidra2_broker/server/server_nottested.go
@@ -6,51 +6,14 @@ import (
 	"hidra2_broker/utils"
 	"log"
 	"net/http"
-	"fmt"
-	"time"
-	"sync"
+	"strconv"
 )
 
 func Start() {
-//	test(os.Args[1])
-//	return
 	mux := utils.NewRouter(listRoutes)
-	log.Fatal(http.ListenAndServe("127.0.0.1:5005", http.HandlerFunc(mux.ServeHTTP)))
+	log.Fatal(http.ListenAndServe("localhost:"+strconv.Itoa(settings.Port), http.HandlerFunc(mux.ServeHTTP)))
 }
 
-func test(db_name string) {
-	nattempts := 50000
-	nconns := 8
-	start := time.Now()
-	nattempts = nattempts / nconns
-	counts := make([]int, nconns)
-	nbad := make([]int, nconns)
-	ngood := make([]int, nconns)
-
-	var waitGroup sync.WaitGroup
-	waitGroup.Add(nconns)
-
-	a := func(i int) {
-		for ; counts[i] < nattempts; counts[i]++ {
-			_,code := getNextRecord(db_name)
-			if code != utils.StatusOK {
-				nbad[i]++
-			} else {
-				ngood[i]++
-			}
-		}
-		waitGroup.Done()
-	}
-
-	for i := 0; i < nconns; i++ {
-		go a(i)
-	}
-	waitGroup.Wait()
-	sum := 0
-	for i := range counts {
-		sum += counts[i]
-	}
-	elapsed := time.Since(start)
-	fmt.Println("rate:", float64(sum)/elapsed.Seconds())
-	fmt.Println("good,bad:", ngood, nbad)
+func ReadConfig(fname string) error {
+	return utils.ReadJsonFromFile(fname, &settings)
 }
diff --git a/broker/src/hidra2_broker/server/server_test.go b/broker/src/hidra2_broker/server/server_test.go
index 52c835ad0..9d6d3d730 100644
--- a/broker/src/hidra2_broker/server/server_test.go
+++ b/broker/src/hidra2_broker/server/server_test.go
@@ -34,8 +34,10 @@ func TestInitDBWithWrongAddress(t *testing.T) {
 
 	mock_db.ExpectedCalls = nil
 
+	settings.DbAddress = "0.0.0.0:0000"
+
 	for _, test := range initDBTests {
-		mock_db.On("Connect", mock.AnythingOfType("string")).Return(test.answer)
+		mock_db.On("Connect", "0.0.0.0:0000").Return(test.answer)
 
 		err := InitDB(mock_db)
 
diff --git a/broker/src/hidra2_broker/utils/helpers.go b/broker/src/hidra2_broker/utils/helpers.go
index cadb8a908..02bb46796 100644
--- a/broker/src/hidra2_broker/utils/helpers.go
+++ b/broker/src/hidra2_broker/utils/helpers.go
@@ -1,6 +1,9 @@
 package utils
 
-import "encoding/json"
+import (
+	json "encoding/json"
+	"io/ioutil"
+)
 
 func StringInSlice(a string, list []string) bool {
 	for _, b := range list {
@@ -19,3 +22,16 @@ func MapToJson(res interface{}) ([]byte, error) {
 		return nil, err
 	}
 }
+
+func ReadJsonFromFile(fname string, config interface{}) error {
+	content, err := ioutil.ReadFile(fname)
+	if err != nil {
+		return err
+	}
+
+	err = json.Unmarshal(content, config)
+	if err != nil {
+		return err
+	}
+	return nil
+}
diff --git a/examples/worker/getnext_broker/CMakeLists.txt b/examples/worker/getnext_broker/CMakeLists.txt
index 481cda44d..58f244cf8 100644
--- a/examples/worker/getnext_broker/CMakeLists.txt
+++ b/examples/worker/getnext_broker/CMakeLists.txt
@@ -10,6 +10,7 @@ set_target_properties(${TARGET_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY
 
 get_target_property(VAR ${TARGET_NAME} RUNTIME_OUTPUT_DIRECTORY)
 
+configure_file(${CMAKE_SOURCE_DIR}/tests/settings/broker_settings.json settings.json COPYONLY)
 add_script_test("${TARGET_NAME}" "${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME} $<TARGET_PROPERTY:hidra2-broker,EXENAME>")
 
 set (dir examples/worker/${TARGET_NAME})
diff --git a/examples/worker/getnext_broker/check_linux.sh b/examples/worker/getnext_broker/check_linux.sh
index 3a676574e..d4b766bc4 100644
--- a/examples/worker/getnext_broker/check_linux.sh
+++ b/examples/worker/getnext_broker/check_linux.sh
@@ -15,7 +15,7 @@ Cleanup() {
 args=${@:1:$(($# - 1))}
 broker=${@:$#}
 
-$broker &
+$broker settings.json &
 brokerid=`echo $!`
 sleep 0.3
 
diff --git a/examples/worker/getnext_broker/check_windows.bat b/examples/worker/getnext_broker/check_windows.bat
index 3936d42ff..b3025ffce 100644
--- a/examples/worker/getnext_broker/check_windows.bat
+++ b/examples/worker/getnext_broker/check_windows.bat
@@ -7,7 +7,7 @@ SET mongo_exe="c:\Program Files\MongoDB\Server\3.6\bin\mongo.exe"
 set full_name="%2"
 set short_name="%~nx2"
 
-start /B "" "%full_name%"
+start /B "" "%full_name%" settings.json
 
 ping 1.0.0.0 -n 1 -w 100 > nul
 
diff --git a/tests/broker/CMakeLists.txt b/tests/broker/CMakeLists.txt
index 26b4e7f91..c37417477 100644
--- a/tests/broker/CMakeLists.txt
+++ b/tests/broker/CMakeLists.txt
@@ -1,2 +1,3 @@
 add_subdirectory(get_next)
+add_subdirectory(read_config)
 
diff --git a/tests/broker/get_next/CMakeLists.txt b/tests/broker/get_next/CMakeLists.txt
index 92811c872..4eb27c114 100644
--- a/tests/broker/get_next/CMakeLists.txt
+++ b/tests/broker/get_next/CMakeLists.txt
@@ -3,5 +3,6 @@ set(TARGET_NAME hidra2-broker)
 ################################
 # Testing
 ################################
+configure_file(${CMAKE_SOURCE_DIR}/tests/settings/broker_settings.json settings.json COPYONLY)
 add_script_test("${TARGET_NAME}-getnext" "$<TARGET_PROPERTY:${TARGET_NAME},EXENAME>" nomem
         )
diff --git a/tests/broker/get_next/check_linux.sh b/tests/broker/get_next/check_linux.sh
index 915e3c083..fb0b7f887 100644
--- a/tests/broker/get_next/check_linux.sh
+++ b/tests/broker/get_next/check_linux.sh
@@ -15,8 +15,7 @@ Cleanup() {
 echo "db.data.insert({"_id":2})" | mongo ${database_name}
 echo "db.data.insert({"_id":1})" | mongo ${database_name}
 
-
-$@ &
+$@ settings.json &
 
 sleep 0.3
 brokerid=`echo $!`
diff --git a/tests/broker/get_next/check_windows.bat b/tests/broker/get_next/check_windows.bat
index 7ba081978..ffdcef0b7 100644
--- a/tests/broker/get_next/check_windows.bat
+++ b/tests/broker/get_next/check_windows.bat
@@ -7,7 +7,7 @@ echo db.data.insert({"_id":2}) | %mongo_exe% %database_name%  || goto :error
 set full_name="%1"
 set short_name="%~nx1"
 
-start /B "" "%full_name%"
+start /B "" "%full_name%" settings.json
 
 ping 1.0.0.0 -n 1 -w 100 > nul
 
diff --git a/tests/broker/read_config/CMakeLists.txt b/tests/broker/read_config/CMakeLists.txt
new file mode 100644
index 000000000..a8949ad81
--- /dev/null
+++ b/tests/broker/read_config/CMakeLists.txt
@@ -0,0 +1,9 @@
+set(TARGET_NAME hidra2-broker)
+
+################################
+# Testing
+################################
+configure_file(${CMAKE_SOURCE_DIR}/tests/settings/broker_settings.json settings_good.json COPYONLY)
+configure_file(settings_bad.json settings_bad.json COPYONLY)
+add_script_test("${TARGET_NAME}-readconfig" "$<TARGET_PROPERTY:${TARGET_NAME},EXENAME>" nomem
+        )
diff --git a/tests/broker/read_config/check_linux.sh b/tests/broker/read_config/check_linux.sh
new file mode 100644
index 000000000..e491171a3
--- /dev/null
+++ b/tests/broker/read_config/check_linux.sh
@@ -0,0 +1,15 @@
+#!/usr/bin/env bash
+
+set -e
+database_name=data
+
+$@ settings_good.json &
+sleep 0.3
+brokerid=`echo $!`
+kill -9 $brokerid
+
+# check if gives error with bad json file
+$@ settings_bad.json 2>&1 | grep "invalid"
+
+# check if gives error non-existing file
+$@ settings_notexist.json 2>&1 | grep "no such"
diff --git a/tests/broker/read_config/check_windows.bat b/tests/broker/read_config/check_windows.bat
new file mode 100644
index 000000000..ec384f82f
--- /dev/null
+++ b/tests/broker/read_config/check_windows.bat
@@ -0,0 +1,19 @@
+
+
+set full_name="%1"
+set short_name="%~nx1"
+
+start /B "" "%full_name%" settings_good.json
+
+ping 1.0.0.0 -n 1 -w 100 > nul
+Taskkill /IM "%short_name%" /F
+
+"%full_name%" settings_bad.json 2>&1 | findstr invalid  || goto :error
+
+"%full_name%" settings_notexist.json  2>&1 | findstr such  || goto :error
+
+
+exit /b 0
+
+:error
+exit /b 1
diff --git a/tests/broker/read_config/settings_bad.json b/tests/broker/read_config/settings_bad.json
new file mode 100644
index 000000000..01598594a
--- /dev/null
+++ b/tests/broker/read_config/settings_bad.json
@@ -0,0 +1,4 @@
+{
+  "dbaddress":"127.0.0.1:27017",
+  "port":
+}
\ No newline at end of file
diff --git a/tests/settings/broker_settings.json b/tests/settings/broker_settings.json
new file mode 100644
index 000000000..841f19946
--- /dev/null
+++ b/tests/settings/broker_settings.json
@@ -0,0 +1,4 @@
+{
+  "dbaddress":"127.0.0.1:27017",
+  "port":5005
+}
\ No newline at end of file
diff --git a/tests/worker/next_multithread_broker/CMakeLists.txt b/tests/worker/next_multithread_broker/CMakeLists.txt
index d2eadd2cd..e97403117 100644
--- a/tests/worker/next_multithread_broker/CMakeLists.txt
+++ b/tests/worker/next_multithread_broker/CMakeLists.txt
@@ -11,6 +11,7 @@ target_link_libraries(${TARGET_NAME} test_common hidra2-worker  ${CMAKE_THREAD_L
 ################################
 # Testing
 ################################
+configure_file(${CMAKE_SOURCE_DIR}/tests/settings/broker_settings.json settings.json COPYONLY)
 add_script_test("${TARGET_NAME}" "$<TARGET_FILE:${TARGET_NAME}> $<TARGET_PROPERTY:hidra2-broker,EXENAME>"
         )
 
diff --git a/tests/worker/next_multithread_broker/check_linux.sh b/tests/worker/next_multithread_broker/check_linux.sh
index f7a7105f0..d1f5e2a23 100644
--- a/tests/worker/next_multithread_broker/check_linux.sh
+++ b/tests/worker/next_multithread_broker/check_linux.sh
@@ -15,7 +15,7 @@ Cleanup() {
 args=${@:1:$(($# - 1))}
 broker=${@:$#}
 
-$broker &
+$broker settings.json &
 brokerid=`echo $!`
 sleep 0.3
 
diff --git a/tests/worker/next_multithread_broker/check_windows.bat b/tests/worker/next_multithread_broker/check_windows.bat
index 895deb5f3..7fbbd8931 100644
--- a/tests/worker/next_multithread_broker/check_windows.bat
+++ b/tests/worker/next_multithread_broker/check_windows.bat
@@ -7,7 +7,7 @@ SET mongo_exe="c:\Program Files\MongoDB\Server\3.6\bin\mongo.exe"
 set full_name="%2"
 set short_name="%~nx2"
 
-start /B "" "%full_name%"
+start /B "" "%full_name%" settings.json
 
 ping 1.0.0.0 -n 1 -w 100 > nul
 
-- 
GitLab