blob: 45e76660451286a19e7155aeb5917d31b32b306b [file] [log] [blame]
subhash kumar singh327d9db2021-09-30 19:07:18 +00001/*
2==================================================================================
3 Copyright (c) 2021 Samsung
4
5 Licensed under the Apache License, Version 2.0 (the "License");
6 you may not use this file except in compliance with the License.
7 You may obtain a copy of the License at
8
9 http://www.apache.org/licenses/LICENSE-2.0
10
11 Unless required by applicable law or agreed to in writing, software
12 distributed under the License is distributed on an "AS IS" BASIS,
13 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 See the License for the specific language governing permissions and
15 limitations under the License.
16
17 This source code is part of the near-RT RIC (RAN Intelligent Controller)
18 platform project (RICP).
19==================================================================================
20*/
21package resthooks
22
23import (
naman.gupta3ad6de42022-04-26 21:59:05 +053024 "encoding/json"
subhash kumar singh327d9db2021-09-30 19:07:18 +000025 "os"
naman.guptad5aa5be2022-02-23 11:44:43 +053026 "strconv"
subhash kumar singh327d9db2021-09-30 19:07:18 +000027 "testing"
Naman Gupta/Single vRAN Call Control /SRI-Bangalore/Engineer/Samsung Electronics584d7552022-09-27 10:32:15 +053028 "time"
subhash kumar singh327d9db2021-09-30 19:07:18 +000029
naman.guptaab3e9ee2022-02-18 18:03:36 +053030 "gerrit.o-ran-sc.org/r/ric-plt/a1/pkg/a1"
naman.guptad5aa5be2022-02-23 11:44:43 +053031 "gerrit.o-ran-sc.org/r/ric-plt/a1/pkg/models"
subhash kumar singh327d9db2021-09-30 19:07:18 +000032 "github.com/stretchr/testify/assert"
33 "github.com/stretchr/testify/mock"
34)
35
naman.gupta1a41ce72022-10-18 00:14:49 +053036type RmrSenderMock struct {
37 mock.Mock
38}
39
subhash kumar singh327d9db2021-09-30 19:07:18 +000040var rh *Resthook
41var sdlInst *SdlMock
naman.gupta1a41ce72022-10-18 00:14:49 +053042var rmrSenderInst *RmrSenderMock
subhash kumar singh327d9db2021-09-30 19:07:18 +000043
44func TestMain(m *testing.M) {
45 sdlInst = new(SdlMock)
subhash kumar singh6017d6a2021-10-26 12:14:26 +000046
naman.guptaab3e9ee2022-02-18 18:03:36 +053047 sdlInst.On("GetAll", "A1m_ns").Return([]string{"a1.policy_instance.1006001.qos",
naman.gupta05a0f582022-05-05 15:59:51 +053048 "a1.policy_instance.20005.123456",
49 "a1.policy_instance.20005.234567",
naman.guptaab3e9ee2022-02-18 18:03:36 +053050 "a1.policy_type.1006001",
51 "a1.policy_type.20000",
52 "a1.policy_inst_metadata.1006001.qos",
53 }, nil)
naman.gupta1a41ce72022-10-18 00:14:49 +053054 RMRclient = new(RMRClientMock)
naman.guptaab3e9ee2022-02-18 18:03:36 +053055 a1.Init()
naman.gupta1a41ce72022-10-18 00:14:49 +053056 rh = createResthook(sdlInst, RMRclient)
subhash kumar singh327d9db2021-09-30 19:07:18 +000057 code := m.Run()
58 os.Exit(code)
59}
60
61func TestGetAllPolicyType(t *testing.T) {
62 resp := rh.GetAllPolicyType()
63 assert.Equal(t, 2, len(resp))
64}
65
naman.guptab5c9dd52022-03-10 15:12:05 +053066func TestGetPolicyType(t *testing.T) {
67
68 policyTypeId := models.PolicyTypeID(20001)
69
naman.guptab5c9dd52022-03-10 15:12:05 +053070 var policyTypeSchema models.PolicyTypeSchema
71 name := "admission_control_policy_mine"
72 policyTypeSchema.Name = &name
73 policytypeid := int64(20001)
74 policyTypeSchema.PolicyTypeID = &policytypeid
75 description := "various parameters to control admission of dual connection"
76 policyTypeSchema.Description = &description
77 schema := `{"$schema": "http://json-schema.org/draft-07/schema#","type":"object","properties": {"enforce": {"type":"boolean","default":"true",},"window_length": {"type": "integer","default":1,"minimum":1,"maximum":60,"description": "Sliding window length (in minutes)",},
78"blocking_rate": {"type":"number","default":10,"minimum":1,"maximum":100,"description": "% Connections to block",},"additionalProperties": false,},}`
79 policyTypeSchema.CreateSchema = schema
80 key := a1PolicyPrefix + strconv.FormatInt((int64(policyTypeId)), 10)
Naman Gupta/Single vRAN Call Control /SRI-Bangalore/Engineer/Samsung Electronics584d7552022-09-27 10:32:15 +053081 var keys [1]string
82 keys[0] = key
naman.guptab5c9dd52022-03-10 15:12:05 +053083 //Setup Expectations
Naman Gupta/Single vRAN Call Control /SRI-Bangalore/Engineer/Samsung Electronics584d7552022-09-27 10:32:15 +053084 sdlInst.On("Get", a1MediatorNs, keys[:]).Return(map[string]interface{}{key: policyTypeSchema}, nil)
85 resp := rh.GetPolicyType(policyTypeId)
naman.guptab5c9dd52022-03-10 15:12:05 +053086 assert.NotNil(t, resp)
87
88 sdlInst.AssertExpectations(t)
89
90}
91
naman.guptad5aa5be2022-02-23 11:44:43 +053092func TestCreatePolicyType(t *testing.T) {
93 var policyTypeId models.PolicyTypeID
94 policyTypeId = 20001
95 var policyTypeSchema models.PolicyTypeSchema
96 name := "admission_control_policy_mine"
97 policyTypeSchema.Name = &name
98 policytypeid := int64(20001)
99 policyTypeSchema.PolicyTypeID = &policytypeid
100 description := "various parameters to control admission of dual connection"
101 policyTypeSchema.Description = &description
102 policyTypeSchema.CreateSchema = `{"$schema": "http://json-schema.org/draft-07/schema#","type":"object","properties": {"enforce": {"type":"boolean","default":"true",},"window_length": {"type": "integer","default":1,"minimum":1,"maximum":60,"description": "Sliding window length (in minutes)",},
103"blocking_rate": {"type":"number","default":10,"minimum":1,"maximum":100,"description": "% Connections to block",},"additionalProperties": false,},}`
104
105 data, err := policyTypeSchema.MarshalBinary()
106 a1.Logger.Debug("error : %+v ", err)
107 a1.Logger.Debug("data : %+v ", data)
naman.guptab5c9dd52022-03-10 15:12:05 +0530108 key := a1PolicyPrefix + strconv.FormatInt(20001, 10)
naman.guptad5aa5be2022-02-23 11:44:43 +0530109 a1.Logger.Debug("key : %+v ", key)
110 //Setup Expectations
111 sdlInst.On("SetIfNotExists", a1MediatorNs, key, string(data)).Return(true, nil)
112
113 errresp := rh.CreatePolicyType(policyTypeId, policyTypeSchema)
114 //Data Assertion
115 assert.Nil(t, errresp)
116 //Mock Assertion :Behavioral
117 sdlInst.AssertExpectations(t)
118}
119
naman.gupta3ad6de42022-04-26 21:59:05 +0530120func TestCreatePolicyTypeInstance(t *testing.T) {
naman.gupta3ad6de42022-04-26 21:59:05 +0530121 var policyInstanceID models.PolicyInstanceID
122 policyInstanceID = "123456"
Naman Gupta/Single vRAN Call Control /SRI-Bangalore/Engineer/Samsung Electronics584d7552022-09-27 10:32:15 +0530123 var httpBody = `{"enforce":true,"window_length":20,"blocking_rate":20,"trigger_threshold":10}`
124 instancekey := a1InstancePrefix + strconv.FormatInt(20001, 10) + "." + string(policyInstanceID)
125 var policyTypeId models.PolicyTypeID
126 policyTypeId = 20001
naman.gupta3ad6de42022-04-26 21:59:05 +0530127
Naman Gupta/Single vRAN Call Control /SRI-Bangalore/Engineer/Samsung Electronics584d7552022-09-27 10:32:15 +0530128 var instancedata map[string]interface{}
129
130 json.Unmarshal([]byte(httpBody), &instancedata)
131
132 data, _ := json.Marshal(instancedata)
133 a1.Logger.Debug("Marshaled data : %+v", string(data))
134 a1.Logger.Debug("instancekey : %+v", instancekey)
naman.gupta3ad6de42022-04-26 21:59:05 +0530135 instancearr := []interface{}{instancekey, string(data)}
Naman Gupta/Single vRAN Call Control /SRI-Bangalore/Engineer/Samsung Electronics584d7552022-09-27 10:32:15 +0530136 sdlInst.On("Set", "A1m_ns", instancearr).Return(nil)
137
138 metadatainstancekey := a1InstanceMetadataPrefix + strconv.FormatInt(20001, 10) + "." + string(policyInstanceID)
139 creation_timestamp := time.Now()
140 var metadatajson []interface{}
141 metadatajson = append(metadatajson, map[string]string{"created_at": creation_timestamp.Format("2006-01-02 15:04:05"), "has_been_deleted": "False"})
142 metadata, _ := json.Marshal(metadatajson)
143 a1.Logger.Debug("Marshaled Metadata : %+v", string(metadata))
144 a1.Logger.Debug("metadatainstancekey : %+v", metadatainstancekey)
145 metadatainstancearr := []interface{}{metadatainstancekey, string(metadata)}
146 sdlInst.On("Set", "A1m_ns", metadatainstancearr).Return(nil)
naman.gupta1a41ce72022-10-18 00:14:49 +0530147 rmrSenderInst.On("RmrSendToXapp", "httpBodyString").Return(true)
Naman Gupta/Single vRAN Call Control /SRI-Bangalore/Engineer/Samsung Electronics584d7552022-09-27 10:32:15 +0530148
149 errresp := rh.CreatePolicyInstance(policyTypeId, policyInstanceID, instancedata)
naman.gupta3ad6de42022-04-26 21:59:05 +0530150
151 assert.Nil(t, errresp)
152 sdlInst.AssertExpectations(t)
153}
154
naman.gupta6579f782022-05-02 15:34:31 +0530155func TestGetPolicyInstance(t *testing.T) {
156
157 var policyTypeId models.PolicyTypeID
158 policyTypeId = 20001
159 var policyInstanceID models.PolicyInstanceID
160 policyInstanceID = "123456"
161 httpBody := `{
162 "enforce":true,
163 "window_length":20,
164 "blocking_rate":20,
165 "trigger_threshold":10
166 }`
naman.gupta6242a3f2022-10-03 16:05:10 +0530167 instancekey := a1InstancePrefix + strconv.FormatInt(20001, 10) + "." + string(policyInstanceID)
naman.gupta6579f782022-05-02 15:34:31 +0530168 a1.Logger.Debug("httpBody String : %+v", httpBody)
169 a1.Logger.Debug("key : %+v", instancekey)
170 var keys [1]string
171 keys[0] = instancekey
172 //Setup Expectations
173 sdlInst.On("Get", a1MediatorNs, keys[:]).Return(httpBody, nil)
174
Naman Gupta/Single vRAN Call Control /SRI-Bangalore/Engineer/Samsung Electronics584d7552022-09-27 10:32:15 +0530175 resp, err := rh.GetPolicyInstance(policyTypeId, policyInstanceID)
176 a1.Logger.Error("err : %+v", err)
naman.gupta6579f782022-05-02 15:34:31 +0530177 assert.NotNil(t, resp)
178
179 sdlInst.AssertExpectations(t)
180}
181
naman.gupta05a0f582022-05-05 15:59:51 +0530182func TestGetAllPolicyIntances(t *testing.T) {
183 var policyTypeId models.PolicyTypeID
184 policyTypeId = 20005
Naman Gupta/Single vRAN Call Control /SRI-Bangalore/Engineer/Samsung Electronics584d7552022-09-27 10:32:15 +0530185 resp, err := rh.GetAllPolicyInstance(policyTypeId)
186 a1.Logger.Error("err : %+v", err)
naman.gupta05a0f582022-05-05 15:59:51 +0530187 assert.Equal(t, 2, len(resp))
188}
189
naman.guptab5136502022-10-18 00:25:14 +0530190func TestDeletePolicyType(t *testing.T) {
191
192 policyTypeId := models.PolicyTypeID(20001)
193 key := a1PolicyPrefix + strconv.FormatInt((int64(policyTypeId)), 10)
194 var keys [1]string
195 keys[0] = key
196
197 //Setup Expectations
198 sdlInst.On("Remove", a1MediatorNs, keys[:]).Return(nil)
199
200 errresp := rh.DeletePolicyType(policyTypeId)
201
202 assert.Nil(t, errresp)
203 sdlInst.AssertExpectations(t)
204}
205
subhash kumar singh327d9db2021-09-30 19:07:18 +0000206type SdlMock struct {
207 mock.Mock
208}
209
210func (s *SdlMock) GetAll(ns string) ([]string, error) {
naman.guptaab3e9ee2022-02-18 18:03:36 +0530211 args := s.MethodCalled("GetAll", ns)
212 return args.Get(0).([]string), nil
213}
214
naman.gupta68644732022-02-24 14:41:55 +0530215func (s *SdlMock) Get(ns string, keys []string) (map[string]interface{}, error) {
naman.guptab5c9dd52022-03-10 15:12:05 +0530216 a1.Logger.Debug("Get Called ")
217 args := s.MethodCalled("Get", ns, keys)
218 a1.Logger.Debug("keys :%+v", args.Get(1))
naman.guptab5c9dd52022-03-10 15:12:05 +0530219 policytypeid := int64(20001)
Naman Gupta/Single vRAN Call Control /SRI-Bangalore/Engineer/Samsung Electronics584d7552022-09-27 10:32:15 +0530220 policyInstanceID := "123456"
221 var policySchemaString string
222 var key string
223 if keys[0] == "a1.policy_instance.20001.123456" {
224 policySchemaString = `{
225 "enforce":true,
226 "window_length":20,
227 "blocking_rate":20,
228 "trigger_threshold":10
229 }`
230 key = a1InstancePrefix + strconv.FormatInt(policytypeid, 10) + "." + string(policyInstanceID)
231 } else if keys[0] == "a1.policy_type.20001" {
naman.gupta6242a3f2022-10-03 16:05:10 +0530232 policySchemaString = `{"create_schema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"additionalProperties":false,"blocking_rate":{"default":10,"description":"% Connections to block","maximum":1001,"minimum":1,"type":"number"},"enforce":{"default":"true","type":"boolean"},"window_length":{"default":1,"description":"Sliding window length (in minutes)","maximum":60,"minimum":1,"type":"integer"}},"type":"object"},"description":"various parameters to control admission of dual connection","name":"admission_control_policy_mine","policy_type_id":20001}`
Naman Gupta/Single vRAN Call Control /SRI-Bangalore/Engineer/Samsung Electronics584d7552022-09-27 10:32:15 +0530233 key = a1PolicyPrefix + strconv.FormatInt((policytypeid), 10)
234 }
naman.gupta1a41ce72022-10-18 00:14:49 +0530235 a1.Logger.Debug(" policy SchemaString %+v", policySchemaString)
Naman Gupta/Single vRAN Call Control /SRI-Bangalore/Engineer/Samsung Electronics584d7552022-09-27 10:32:15 +0530236 policyTypeSchema, _ := json.Marshal((policySchemaString))
naman.gupta1a41ce72022-10-18 00:14:49 +0530237 a1.Logger.Debug(" policyTypeSchema %+v", string(policyTypeSchema))
naman.gupta6242a3f2022-10-03 16:05:10 +0530238
naman.gupta1a41ce72022-10-18 00:14:49 +0530239 a1.Logger.Debug(" key for policy type %+v", key)
naman.gupta6242a3f2022-10-03 16:05:10 +0530240 mp := map[string]interface{}{key: string(policySchemaString)}
naman.gupta1a41ce72022-10-18 00:14:49 +0530241 a1.Logger.Debug("Get Called and mp return %+v ", mp)
242
naman.guptab5c9dd52022-03-10 15:12:05 +0530243 return mp, nil
naman.gupta68644732022-02-24 14:41:55 +0530244}
naman.gupta3ad6de42022-04-26 21:59:05 +0530245
246func (s *SdlMock) SetIfNotExists(ns string, key string, data interface{}) (bool, error) {
247 args := s.MethodCalled("SetIfNotExists", ns, key, data)
248 return args.Bool(0), args.Error(1)
249}
250
251func (s *SdlMock) Set(ns string, pairs ...interface{}) error {
252 args := s.MethodCalled("Set", ns, pairs)
Naman Gupta/Single vRAN Call Control /SRI-Bangalore/Engineer/Samsung Electronics584d7552022-09-27 10:32:15 +0530253 return args.Error(0)
naman.gupta3ad6de42022-04-26 21:59:05 +0530254}
255func (s *SdlMock) SetIf(ns string, key string, oldData, newData interface{}) (bool, error) {
256 args := s.MethodCalled("SetIfNotExists", ns, key, oldData, newData)
257 return args.Bool(0), args.Error(1)
258}
naman.gupta1a41ce72022-10-18 00:14:49 +0530259
260func (rmr *RmrSenderMock) RmrSendToXapp(httpBodyString string) bool {
261 args := rmr.MethodCalled("RmrSendToXapp", httpBodyString)
262 return args.Bool(0)
263}
naman.guptab5136502022-10-18 00:25:14 +0530264
265func (s *SdlMock) Remove(ns string, keys []string) error {
266 args := s.MethodCalled("Remove", ns, keys)
267 return args.Error(0)
268}