REST duplicate detection
[ric-plt/submgr.git] / pkg / control / duplicate_test.go
diff --git a/pkg/control/duplicate_test.go b/pkg/control/duplicate_test.go
new file mode 100644 (file)
index 0000000..0b33906
--- /dev/null
@@ -0,0 +1,185 @@
+/*
+==================================================================================
+  Copyright (c) 2021 Nokia
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+==================================================================================
+*/
+
+package control
+
+import (
+       "fmt"
+       "testing"
+
+       "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/models"
+       "github.com/stretchr/testify/assert"
+)
+
+type testData struct {
+       Name    *string
+       Data    []byte
+       SomeVal *int64
+}
+
+func TestDefaultUseCase(t *testing.T) {
+
+       fmt.Println("#####################  TestRetransmissionChecker  #####################")
+
+       var retransCtrl duplicateCtrl
+       restSubdId := "898dfkjashntgkjasgho4"
+       var name string = "yolo"
+       var someVal int64 = 98765
+       data := testData{Name: &name, Data: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, SomeVal: &someVal}
+
+       retransCtrl.Init()
+
+       _, duplicate, md5sum := retransCtrl.IsDuplicateToOngoingTransaction(restSubdId, data)
+
+       assert.Equal(t, 1, len(retransCtrl.retransMap))
+       assert.Equal(t, false, duplicate)
+
+       retransCtrl.TransactionComplete(md5sum)
+
+       assert.Equal(t, 0, len(retransCtrl.retransMap))
+}
+
+func TestDuplicate(t *testing.T) {
+
+       fmt.Println("#####################  TestDuplicate  #####################")
+
+       var retransCtrl duplicateCtrl
+       restSubdId := "898dfkjashntgkjasgho4"
+       var name string = "yolo"
+       var someVal int64 = 98765
+       data := testData{Name: &name, Data: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, SomeVal: &someVal}
+
+       var name2 string = "yolo"
+       var someVal2 int64 = 98765
+
+       data2 := new(testData)
+       data2.Name = &name2
+       data2.SomeVal = &someVal2
+       datax := []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
+       data2.Data = datax
+
+       retransCtrl.Init()
+
+       _, duplicate, md5sum := retransCtrl.IsDuplicateToOngoingTransaction(restSubdId, data)
+       assert.Equal(t, 1, len(retransCtrl.retransMap))
+       assert.Equal(t, false, duplicate)
+
+       _, duplicate, md5sum = retransCtrl.IsDuplicateToOngoingTransaction(restSubdId, data2)
+       assert.Equal(t, 1, len(retransCtrl.retransMap))
+       assert.Equal(t, true, duplicate)
+
+       retransCtrl.TransactionComplete(md5sum)
+
+       assert.Equal(t, 0, len(retransCtrl.retransMap))
+}
+
+func TestNoneDuplicate(t *testing.T) {
+
+       fmt.Println("#####################  TestNoneDuplicate  #####################")
+
+       var retransCtrl duplicateCtrl
+       restSubdId := "898dfkjashntgkjasgho4"
+       var name string = "yolo"
+       var someVal int64 = 98765
+       data := testData{Name: &name, Data: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, SomeVal: &someVal}
+
+       var name2 string = "yolo"
+       var someVal2 int64 = 98765
+
+       data2 := new(testData)
+       data2.Name = &name2
+       data2.SomeVal = &someVal2
+       datax := []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 1} // One byte changed
+       data2.Data = datax
+
+       retransCtrl.Init()
+
+       _, duplicate, md5sum := retransCtrl.IsDuplicateToOngoingTransaction(restSubdId, data)
+       assert.Equal(t, 1, len(retransCtrl.retransMap))
+       assert.Equal(t, false, duplicate)
+
+       _, duplicate2, md5sum2 := retransCtrl.IsDuplicateToOngoingTransaction(restSubdId, data2)
+       assert.Equal(t, 2, len(retransCtrl.retransMap))
+       assert.Equal(t, false, duplicate2)
+
+       retransCtrl.TransactionComplete(md5sum)
+       retransCtrl.TransactionComplete(md5sum2)
+
+       assert.Equal(t, 0, len(retransCtrl.retransMap))
+}
+
+func TestEncodingError(t *testing.T) {
+
+       fmt.Println("#####################  TestEncodingError  #####################")
+
+       var retransCtrl duplicateCtrl
+       restSubdId := "898dfkjashntgkjasgho4"
+       var data interface{}
+
+       retransCtrl.Init()
+
+       err, duplicate, _ := retransCtrl.IsDuplicateToOngoingTransaction(restSubdId, data)
+       assert.NotEqual(t, err, nil)
+       assert.Equal(t, 0, len(retransCtrl.retransMap))
+       assert.Equal(t, false, duplicate)
+}
+
+func TestRemovalError(t *testing.T) {
+
+       fmt.Println("#####################  TestRemovalError  #####################")
+
+       var retransCtrl duplicateCtrl
+       restSubdId := "898dfkjashntgkjasgho4"
+       var data testData
+
+       retransCtrl.Init()
+
+       err, duplicate, md5sum := retransCtrl.IsDuplicateToOngoingTransaction(restSubdId, data)
+       assert.Equal(t, 1, len(retransCtrl.retransMap))
+       assert.Equal(t, false, duplicate)
+
+       err = retransCtrl.TransactionComplete(md5sum)
+       assert.Empty(t, err)
+
+       err = retransCtrl.TransactionComplete(md5sum)
+       assert.NotEmpty(t, err)
+}
+
+func TestXappRestReqDuplicate(t *testing.T) {
+
+       fmt.Println("#####################  TestXappRestReqDuplicate  #####################")
+
+       var retransCtrl duplicateCtrl
+
+       msg1 := new(models.SubscriptionParams)
+       msg2 := new(models.SubscriptionParams)
+
+       retransCtrl.Init()
+
+       _, duplicate, md5sum := retransCtrl.IsDuplicateToOngoingTransaction("foobar", msg1)
+       assert.Equal(t, 1, len(retransCtrl.retransMap))
+       assert.Equal(t, false, duplicate)
+
+       _, duplicate, md5sum = retransCtrl.IsDuplicateToOngoingTransaction("foobar", msg2)
+       assert.Equal(t, 1, len(retransCtrl.retransMap))
+       assert.Equal(t, true, duplicate)
+
+       retransCtrl.TransactionComplete(md5sum)
+
+       assert.Equal(t, 0, len(retransCtrl.retransMap))
+}