mainCtrl.RmrControl.Init("SUBMGRCTL", srcId, rtgSvc)
mainCtrl.c = NewControl()
xapp.Logger.Debug("Replacing real db with test db")
- mainCtrl.c.db = CreateMock() // This overrides real database for testing
+ mainCtrl.c.e2SubsDb = CreateMock() // This overrides real E2 Subscription database for testing
+ mainCtrl.c.restSubsDb = CreateRestSubsDbMock() // This overrides real REST Subscription database for testing
xapp.SetReadyCB(mainCtrl.ReadyCB, nil)
go xapp.RunWithParams(mainCtrl.c, false)
mainCtrl.WaitCB()
mainCtrl.c.registry.subIds = nil
// Initialize subIds slice and subscription map
mainCtrl.c.registry.Initialize()
+ restDuplicateCtrl.Init()
// Read subIds and subscriptions from database
subIds, register, err := mainCtrl.c.ReadAllSubscriptionsFromSdl()
if err != nil {
go mainCtrl.c.HandleUncompletedSubscriptions(mainCtrl.c.registry.register)
}
+func (mc *testingSubmgrControl) MakeTransactionNil(t *testing.T, subId uint32) {
+
+ mc.TestLog(t, "Makin transaction nil for SubId=%v", subId)
+ subs := mainCtrl.c.registry.GetSubscription(subId)
+ subs.TheTrans = nil
+}
+
func (mc *testingSubmgrControl) SetResetTestFlag(t *testing.T, status bool) {
- mc.TestLog(t, "ResetTestFlag set to %v=", status)
+ mc.TestLog(t, "ResetTestFlag set to %v", status)
mainCtrl.c.ResetTestFlag = status
}
func (mc *testingSubmgrControl) wait_registry_empty(t *testing.T, secs int) bool {
cnt := int(0)
i := 1
- for ; i <= secs*2; i++ {
+ for ; i <= secs*10; i++ {
cnt = len(mc.c.registry.register)
if cnt == 0 {
return true
}
- time.Sleep(500 * time.Millisecond)
+ time.Sleep(100 * time.Millisecond)
}
mc.TestError(t, "(submgr) no registry empty within %d secs: %d", secs, cnt)
return false
func (mc *testingSubmgrControl) wait_registry_next_subid_change(t *testing.T, origSubId uint32, secs int) (uint32, bool) {
i := 1
- for ; i <= secs*2; i++ {
+ for ; i <= secs*10; i++ {
mc.c.registry.mutex.Lock()
currSubId := mc.c.registry.subIds[0]
mc.c.registry.mutex.Unlock()
if currSubId != origSubId {
return currSubId, true
}
- time.Sleep(500 * time.Millisecond)
+ time.Sleep(100 * time.Millisecond)
}
mc.TestError(t, "(submgr) no subId change within %d secs", secs)
return 0, false
func (mc *testingSubmgrControl) wait_subs_clean(t *testing.T, e2SubsId uint32, secs int) bool {
var subs *Subscription
i := 1
- for ; i <= secs*2; i++ {
+ for ; i <= secs*10; i++ {
subs = mc.c.registry.GetSubscription(e2SubsId)
if subs == nil {
return true
}
- time.Sleep(500 * time.Millisecond)
+ time.Sleep(100 * time.Millisecond)
}
if subs != nil {
mc.TestError(t, "(submgr) no clean within %d secs: %s", secs, subs.String())
return false
}
+func (mc *testingSubmgrControl) wait_multi_subs_clean(t *testing.T, e2SubsIds []uint32, secs int) bool {
+
+ purgedSubscriptions := 0
+
+ for i := 1; i <= secs*10; i++ {
+ purgedSubscriptions = 0
+ for k := 0; k <= len(e2SubsIds); i++ {
+ subs := mc.c.registry.GetSubscription(e2SubsIds[k])
+ if subs == nil {
+ mc.TestLog(t, "(submgr) subscriber purged for esSubsId %v", e2SubsIds[k])
+ purgedSubscriptions += 1
+ if purgedSubscriptions == len(e2SubsIds) {
+ return true
+ }
+ }
+ }
+ mc.TestLog(t, "(submgr) subscriptions pending purging %v/%v after %d msecs", purgedSubscriptions, len(e2SubsIds), i+500)
+ time.Sleep(100 * time.Millisecond)
+ }
+
+ mc.TestError(t, "(submgr) no clean within %d secs: subs(N/A) - %v/%v subscriptions found still", secs, purgedSubscriptions, len(e2SubsIds))
+
+ return false
+}
+
func (mc *testingSubmgrControl) wait_subs_trans_clean(t *testing.T, e2SubsId uint32, secs int) bool {
var trans TransactionIf
i := 1
- for ; i <= secs*2; i++ {
+ for ; i <= secs*10; i++ {
subs := mc.c.registry.GetSubscription(e2SubsId)
if subs == nil {
return true
if trans == nil {
return true
}
- time.Sleep(500 * time.Millisecond)
+ time.Sleep(100 * time.Millisecond)
}
if trans != nil {
mc.TestError(t, "(submgr) no clean within %d secs: %s", secs, trans.String())
}
i := 1
- for ; i <= secs*2; i++ {
+ for ; i <= secs*10; i++ {
curr := subs.EpList.Size()
if curr != orig {
return curr, true
}
- time.Sleep(500 * time.Millisecond)
+ time.Sleep(100 * time.Millisecond)
}
mc.TestError(t, "(submgr) no subs %d entrypoint cnt change within %d secs", origSubId, secs)
return 0, false
func (mc *testingSubmgrControl) wait_msgcounter_change(t *testing.T, orig uint64, secs int) (uint64, bool) {
i := 1
- for ; i <= secs*2; i++ {
+ for ; i <= secs*10; i++ {
curr := mc.c.CntRecvMsg
if curr != orig {
return curr, true
}
- time.Sleep(500 * time.Millisecond)
+ time.Sleep(100 * time.Millisecond)
}
mc.TestError(t, "(submgr) no msg counter change within %d secs", secs)
return 0, false
}
return retCounterMap
}
+
+func (mc *testingSubmgrControl) sendGetRequest(t *testing.T, addr string, path string) {
+
+ mc.TestLog(t, "GET http://"+addr+"%v", path)
+ req, err := http.NewRequest("GET", "http://"+addr+path, nil)
+ if err != nil {
+ mc.TestError(t, "Error reading request. %v", err)
+ return
+ }
+ req.Header.Set("Cache-Control", "no-cache")
+ client := &http.Client{Timeout: time.Second * 2}
+ resp, err := client.Do(req)
+ if err != nil {
+ mc.TestError(t, "Error reading response. %v", err)
+ return
+ }
+ defer resp.Body.Close()
+
+ mc.TestLog(t, "Response status: %v", resp.Status)
+ mc.TestLog(t, "Response Headers: %v", resp.Header)
+ if !strings.Contains(resp.Status, "200 OK") {
+ mc.TestError(t, "Wrong response status")
+ return
+ }
+
+ respBody, err := ioutil.ReadAll(resp.Body)
+ if err != nil {
+ mc.TestError(t, "Error reading body. %v", err)
+ return
+ }
+ mc.TestLog(t, "%s", respBody)
+ return
+}
+
+func (mc *testingSubmgrControl) sendPostRequest(t *testing.T, addr string, path string) {
+
+ mc.TestLog(t, "POST http://"+addr+"%v", path)
+ req, err := http.NewRequest("POST", "http://"+addr+path, nil)
+ if err != nil {
+ mc.TestError(t, "Error reading request. %v", err)
+ return
+ }
+ client := &http.Client{Timeout: time.Second * 2}
+ resp, err := client.Do(req)
+ if err != nil {
+ mc.TestError(t, "Error reading response. %v", err)
+ return
+ }
+ defer resp.Body.Close()
+
+ mc.TestLog(t, "Response status: %v", resp.Status)
+ mc.TestLog(t, "Response Headers: %v", resp.Header)
+ if !strings.Contains(resp.Status, "200 OK") {
+ mc.TestError(t, "Wrong response status")
+ return
+ }
+
+ respBody, err := ioutil.ReadAll(resp.Body)
+ if err != nil {
+ mc.TestError(t, "Error reading body. %v", err)
+ return
+ }
+ mc.TestLog(t, "%s", respBody)
+ return
+}