Skip to content
Snippets Groups Projects
Commit eb9dadb4 authored by Sergey Yakubov's avatar Sergey Yakubov
Browse files

config files for broker

parent f95f4d50
No related branches found
No related tags found
No related merge requests found
Showing
with 111 additions and 54 deletions
...@@ -6,16 +6,31 @@ import ( ...@@ -6,16 +6,31 @@ import (
"hidra2_broker/database" "hidra2_broker/database"
"hidra2_broker/server" "hidra2_broker/server"
"log" "log"
"os"
) )
func NewDefaultDatabase() database.Agent { func NewDefaultDatabase() database.Agent {
return new(database.Mongodb) return new(database.Mongodb)
} }
func PrintUsage() {
log.Fatal("Usage: " + os.Args[0] + " <config file>")
}
func main() { func main() {
err:=server.InitDB(NewDefaultDatabase()) if len(os.Args) != 2 {
if err!= nil { PrintUsage()
log.Fatal(err.Error()) }
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() defer server.CleanupDB()
server.Start() server.Start()
......
...@@ -6,9 +6,16 @@ import ( ...@@ -6,9 +6,16 @@ import (
var db database.Agent var db database.Agent
type serverSettings struct {
DbAddress string
Port int
}
var settings serverSettings
func InitDB(dbAgent database.Agent) error { func InitDB(dbAgent database.Agent) error {
db = dbAgent db = dbAgent
return db.Connect("127.0.0.1:27017") return db.Connect(settings.DbAddress)
} }
func CleanupDB() { func CleanupDB() {
......
...@@ -6,51 +6,14 @@ import ( ...@@ -6,51 +6,14 @@ import (
"hidra2_broker/utils" "hidra2_broker/utils"
"log" "log"
"net/http" "net/http"
"fmt" "strconv"
"time"
"sync"
) )
func Start() { func Start() {
// test(os.Args[1])
// return
mux := utils.NewRouter(listRoutes) 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) { func ReadConfig(fname string) error {
nattempts := 50000 return utils.ReadJsonFromFile(fname, &settings)
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)
} }
...@@ -34,8 +34,10 @@ func TestInitDBWithWrongAddress(t *testing.T) { ...@@ -34,8 +34,10 @@ func TestInitDBWithWrongAddress(t *testing.T) {
mock_db.ExpectedCalls = nil mock_db.ExpectedCalls = nil
settings.DbAddress = "0.0.0.0:0000"
for _, test := range initDBTests { 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) err := InitDB(mock_db)
......
package utils package utils
import "encoding/json" import (
json "encoding/json"
"io/ioutil"
)
func StringInSlice(a string, list []string) bool { func StringInSlice(a string, list []string) bool {
for _, b := range list { for _, b := range list {
...@@ -19,3 +22,16 @@ func MapToJson(res interface{}) ([]byte, error) { ...@@ -19,3 +22,16 @@ func MapToJson(res interface{}) ([]byte, error) {
return nil, err 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
}
...@@ -10,6 +10,7 @@ set_target_properties(${TARGET_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ...@@ -10,6 +10,7 @@ set_target_properties(${TARGET_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY
get_target_property(VAR ${TARGET_NAME} 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>") add_script_test("${TARGET_NAME}" "${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME} $<TARGET_PROPERTY:hidra2-broker,EXENAME>")
set (dir examples/worker/${TARGET_NAME}) set (dir examples/worker/${TARGET_NAME})
......
...@@ -15,7 +15,7 @@ Cleanup() { ...@@ -15,7 +15,7 @@ Cleanup() {
args=${@:1:$(($# - 1))} args=${@:1:$(($# - 1))}
broker=${@:$#} broker=${@:$#}
$broker & $broker settings.json &
brokerid=`echo $!` brokerid=`echo $!`
sleep 0.3 sleep 0.3
......
...@@ -7,7 +7,7 @@ SET mongo_exe="c:\Program Files\MongoDB\Server\3.6\bin\mongo.exe" ...@@ -7,7 +7,7 @@ SET mongo_exe="c:\Program Files\MongoDB\Server\3.6\bin\mongo.exe"
set full_name="%2" set full_name="%2"
set short_name="%~nx2" set short_name="%~nx2"
start /B "" "%full_name%" start /B "" "%full_name%" settings.json
ping 1.0.0.0 -n 1 -w 100 > nul ping 1.0.0.0 -n 1 -w 100 > nul
......
add_subdirectory(get_next) add_subdirectory(get_next)
add_subdirectory(read_config)
...@@ -3,5 +3,6 @@ set(TARGET_NAME hidra2-broker) ...@@ -3,5 +3,6 @@ set(TARGET_NAME hidra2-broker)
################################ ################################
# Testing # 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 add_script_test("${TARGET_NAME}-getnext" "$<TARGET_PROPERTY:${TARGET_NAME},EXENAME>" nomem
) )
...@@ -15,8 +15,7 @@ Cleanup() { ...@@ -15,8 +15,7 @@ Cleanup() {
echo "db.data.insert({"_id":2})" | mongo ${database_name} echo "db.data.insert({"_id":2})" | mongo ${database_name}
echo "db.data.insert({"_id":1})" | mongo ${database_name} echo "db.data.insert({"_id":1})" | mongo ${database_name}
$@ settings.json &
$@ &
sleep 0.3 sleep 0.3
brokerid=`echo $!` brokerid=`echo $!`
......
...@@ -7,7 +7,7 @@ echo db.data.insert({"_id":2}) | %mongo_exe% %database_name% || goto :error ...@@ -7,7 +7,7 @@ echo db.data.insert({"_id":2}) | %mongo_exe% %database_name% || goto :error
set full_name="%1" set full_name="%1"
set short_name="%~nx1" set short_name="%~nx1"
start /B "" "%full_name%" start /B "" "%full_name%" settings.json
ping 1.0.0.0 -n 1 -w 100 > nul ping 1.0.0.0 -n 1 -w 100 > nul
......
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
)
#!/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"
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
{
"dbaddress":"127.0.0.1:27017",
"port":
}
\ No newline at end of file
{
"dbaddress":"127.0.0.1:27017",
"port":5005
}
\ No newline at end of file
...@@ -11,6 +11,7 @@ target_link_libraries(${TARGET_NAME} test_common hidra2-worker ${CMAKE_THREAD_L ...@@ -11,6 +11,7 @@ target_link_libraries(${TARGET_NAME} test_common hidra2-worker ${CMAKE_THREAD_L
################################ ################################
# Testing # 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>" add_script_test("${TARGET_NAME}" "$<TARGET_FILE:${TARGET_NAME}> $<TARGET_PROPERTY:hidra2-broker,EXENAME>"
) )
...@@ -15,7 +15,7 @@ Cleanup() { ...@@ -15,7 +15,7 @@ Cleanup() {
args=${@:1:$(($# - 1))} args=${@:1:$(($# - 1))}
broker=${@:$#} broker=${@:$#}
$broker & $broker settings.json &
brokerid=`echo $!` brokerid=`echo $!`
sleep 0.3 sleep 0.3
......
...@@ -7,7 +7,7 @@ SET mongo_exe="c:\Program Files\MongoDB\Server\3.6\bin\mongo.exe" ...@@ -7,7 +7,7 @@ SET mongo_exe="c:\Program Files\MongoDB\Server\3.6\bin\mongo.exe"
set full_name="%2" set full_name="%2"
set short_name="%~nx2" set short_name="%~nx2"
start /B "" "%full_name%" start /B "" "%full_name%" settings.json
ping 1.0.0.0 -n 1 -w 100 > nul ping 1.0.0.0 -n 1 -w 100 > nul
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment