2 // ========================LICENSE_START=================================
5 // Copyright (C) 2021: Nordix Foundation
7 // Licensed under the Apache License, Version 2.0 (the "License");
8 // you may not use this file except in compliance with the License.
9 // You may obtain a copy of the License at
11 // http://www.apache.org/licenses/LICENSE-2.0
13 // Unless required by applicable law or agreed to in writing, software
14 // distributed under the License is distributed on an "AS IS" BASIS,
15 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 // See the License for the specific language governing permissions and
17 // limitations under the License.
18 // ========================LICENSE_END===================================
26 "github.com/stretchr/testify/assert"
27 "github.com/stretchr/testify/require"
28 "oransc.org/usecase/oduclosedloop/messages"
31 func TestAddMetric(t *testing.T) {
32 assertions := require.New(t)
34 meas messages.Measurement
41 name: "Test adding new metric",
43 meas: messages.Measurement{
44 MeasurementTypeInstanceReference: "/o-ran-sc-du-hello-world:network-function/distributed-unit-functions[id='O-DU-1211']/cell[id='cell-1']/supported-measurements[performance-measurement-type='user-equipment-average-throughput-uplink']/supported-snssai-subcounter-instances[slice-differentiator='1'][slice-service-type='1']",
51 name: "Test with invalid input",
53 meas: messages.Measurement{
54 MeasurementTypeInstanceReference: "/distributed-unit-functions[id='O-DU-1211']/cell[id='cell-1']/supported-measurements[performance-measurement-type='user-equipment-average-throughput-uplink']/supported-snssai-subcounter-instances[slice-differentiator='1'][slice-service-type='1']",
62 sliceAssuranceMeas := NewSliceAssuranceMeas()
63 assertions.Equal(0, len(sliceAssuranceMeas.Metrics), "Metrics is not empty, got: %d, want: %d.", len(sliceAssuranceMeas.Metrics), 0)
65 for i, tt := range tests {
66 t.Run(tt.name, func(t *testing.T) {
69 sliceAssuranceMeas.AddOrUpdateMetric(tt.args.meas)
70 assertions.Equal(1, len(sliceAssuranceMeas.Metrics), "Metrics must have one new metric, got: %d, want: %d.", len(sliceAssuranceMeas.Metrics), 1)
72 testMapKey := MapKey{"O-DU-1211", 1, 1}
73 assertions.Contains(sliceAssuranceMeas.Metrics, testMapKey, "Metric added with wrong values , got: %v.", sliceAssuranceMeas.Metrics[testMapKey])
76 _, got := sliceAssuranceMeas.AddOrUpdateMetric(tt.args.meas)
77 assertions.EqualError(got, " wrong format for MeasurementTypeInstanceReference")
83 func TestUpdateExistingMetric(t *testing.T) {
84 assertions := require.New(t)
85 meas := messages.Measurement{
86 MeasurementTypeInstanceReference: "/o-ran-sc-du-hello-world:network-function/distributed-unit-functions[id='O-DU-1211']/cell[id='cell-1']/supported-measurements[performance-measurement-type='user-equipment-average-throughput-uplink']/supported-snssai-subcounter-instances[slice-differentiator='1'][slice-service-type='1']",
91 updateMeas := messages.Measurement{
92 MeasurementTypeInstanceReference: "/o-ran-sc-du-hello-world:network-function/distributed-unit-functions[id='O-DU-1211']/cell[id='cell-1']/supported-measurements[performance-measurement-type='user-equipment-average-throughput-uplink']/supported-snssai-subcounter-instances[slice-differentiator='1'][slice-service-type='1']",
97 sliceAssuranceMeas := NewSliceAssuranceMeas()
98 assertions.Equal(0, len(sliceAssuranceMeas.Metrics), "Metrics is not empty, got: %d, want: %d.", len(sliceAssuranceMeas.Metrics), 0)
100 sliceAssuranceMeas.AddOrUpdateMetric(meas)
101 assertions.Equal(1, len(sliceAssuranceMeas.Metrics), "Metrics must have one new metric, got: %d, want: %d.", len(sliceAssuranceMeas.Metrics), 1)
103 sliceAssuranceMeas.AddOrUpdateMetric(updateMeas)
104 assertions.Equal(1, len(sliceAssuranceMeas.Metrics), "Metrics must have one updated metric, got: %d, want: %d.", len(sliceAssuranceMeas.Metrics), 1)
106 testMapKey := MapKey{"O-DU-1211", 1, 1}
107 metricName := "user-equipment-average-throughput-uplink"
108 newMetricValue := 897
109 if sliceAssuranceMeas.Metrics[testMapKey].PM[metricName] != newMetricValue {
110 t.Errorf("Metric value was not update properly, got: %d, want: %d.", sliceAssuranceMeas.Metrics[testMapKey].PM[metricName], newMetricValue)
115 func TestDeleteMetricWhenValueLessThanThreshold(t *testing.T) {
117 meas := messages.Measurement{
118 MeasurementTypeInstanceReference: "/o-ran-sc-du-hello-world:network-function/distributed-unit-functions[id='O-DU-1211']/cell[id='cell-1']/supported-measurements[performance-measurement-type='user-equipment-average-throughput-uplink']/supported-snssai-subcounter-instances[slice-differentiator='1'][slice-service-type='1']",
123 newMeas := messages.Measurement{
124 MeasurementTypeInstanceReference: "/o-ran-sc-du-hello-world:network-function/distributed-unit-functions[id='O-DU-1211']/cell[id='cell-1']/supported-measurements[performance-measurement-type='user-equipment-average-throughput-uplink']/supported-snssai-subcounter-instances[slice-differentiator='1'][slice-service-type='1']",
129 sliceAssuranceMeas := NewSliceAssuranceMeas()
130 assert.Equal(t, 0, len(sliceAssuranceMeas.Metrics), "Metrics is not empty, got: %d, want: %d.", len(sliceAssuranceMeas.Metrics), 0)
132 sliceAssuranceMeas.AddOrUpdateMetric(meas)
133 assert.Equal(t, 1, len(sliceAssuranceMeas.Metrics), "Metrics must have one new metric, got: %d, want: %d.", len(sliceAssuranceMeas.Metrics), 1)
135 sliceAssuranceMeas.AddOrUpdateMetric(newMeas)
136 assert.Equal(t, 0, len(sliceAssuranceMeas.Metrics), "Metrics must have been deleted, got: %d, want: %d.", len(sliceAssuranceMeas.Metrics), 0)
140 func TestAddPolicy(t *testing.T) {
142 meas := messages.Measurement{
143 MeasurementTypeInstanceReference: "/o-ran-sc-du-hello-world:network-function/distributed-unit-functions[id='O-DU-1211']/cell[id='cell-1']/supported-measurements[performance-measurement-type='user-equipment-average-throughput-uplink']/supported-snssai-subcounter-instances[slice-differentiator='1'][slice-service-type='1']",
147 sliceAssuranceMeas := NewSliceAssuranceMeas()
148 sliceAssuranceMeas.AddOrUpdateMetric(meas)
151 rrmPolicyRatio := messages.RRMPolicyRatio{
154 UserLabel: "user_label",
155 RRMPolicyMaxRatio: 0,
156 RRMPolicyMinRatio: 0,
157 RRMPolicyDedicatedRatio: 0,
159 RRMPolicyMembers: []messages.RRMPolicyMember{{
160 MobileCountryCode: "046",
161 MobileNetworkCode: "651",
162 SliceDifferentiator: 1,
166 assert.Equal(t, 0, len(sliceAssuranceMeas.Policies), "Policies is not empty, got: %d, want: %d.", len(sliceAssuranceMeas.Policies), 0)
168 sliceAssuranceMeas.AddNewPolicy(duid, rrmPolicyRatio)
169 assert.Equal(t, 1, len(sliceAssuranceMeas.Policies), "Policies must have one new policy, got: %d, want: %d.", len(sliceAssuranceMeas.Policies), 1)
171 sliceAssuranceMeas.PrintStructures()