/* * Copyright (c) 2025 The AdvantEDGE Authors * * 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 ance "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 sssmgr import ( "fmt" "reflect" "testing" log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger" ) const tmName = "meep-iot" const tmNamespace = "sandboxtest" func TestNewSssMgr(t *testing.T) { fmt.Println("--- ", t.Name()) log.MeepTextLogInit(t.Name()) // Invalid Connector fmt.Println("Invalid SSS Asset Manager") tm, err := NewSssMgr("", tmNamespace, "MQTT", "172.29.10.56", 1883, "7feaadbb0400", "laboai-acme-ic-cse", nil, nil, nil) if err == nil || tm != nil { t.Fatalf("Service name not set") } tm, err = NewSssMgr(tmName, tmNamespace, "", "172.29.10.56", 1883, "7feaadbb0400", "laboai-acme-ic-cse", nil, nil, nil) if err == nil || tm != nil { t.Fatalf("Binding protocol not set") } tm, err = NewSssMgr(tmName, tmNamespace, "MQTT", "", 1883, "7feaadbb0400", "laboai-acme-ic-cse", nil, nil, nil) if err == nil || tm != nil { t.Fatalf("Host not set") } tm, err = NewSssMgr(tmName, tmNamespace, "MQTT", "172.29.10.56", 1883, "", "laboai-acme-ic-cse", nil, nil, nil) if err == nil || tm != nil { t.Fatalf("Host id not set") } tm, err = NewSssMgr(tmName, tmNamespace, "MQTT", "172.29.10.56", 1883, "7feaadbb0400", "", nil, nil, nil) if err == nil || tm != nil { t.Fatalf("CSE name not set") } // Valid Connector fmt.Println("Create valid SSS Asset Manager") tm, err = NewSssMgr(tmName, tmNamespace, "MQTT", "172.29.10.56", 1883, "7feaadbb0400", "laboai-acme-ic-cse", nil, nil, nil) if err != nil || tm == nil { t.Fatalf("Failed to create SSS Asset Manager") } // Cleanup err = tm.DeleteSssMgr() if err != nil { t.Fatalf("Failed to cleanup SSS Asset Manager") } tm = nil fmt.Println("Create valid SSS Asset Manager") tm, err = NewSssMgr(tmName, tmNamespace, "REST_HTTP", "172.29.10.56", 31110, "7feaadbb0400", "laboai-acme-ic-cse", nil, nil, nil) if err != nil || tm == nil { t.Fatalf("Failed to create SSS Asset Manager") } // Cleanup err = tm.DeleteSssMgr() if err != nil { t.Fatalf("Failed to cleanup SSS Asset Manager") } tm = nil } // func TestPopulateDevicesPerIotPlatformsHttp(t *testing.T) { // fmt.Println("--- ", t.Name()) // log.MeepTextLogInit(t.Name()) // // Valid Connector // fmt.Println("Create valid SSS Asset Manager") // tm, err := NewSssMgr(tmName, tmNamespace, "REST_HTTP", "", 0, "7feaadbb0400", "laboai-acme-ic-cse", nil, nil, nil) // if err != nil || tm == nil { // t.Fatalf("Failed to create SSS Asset Manager") // } // err = tm.populateDevicesPerIotPlatforms() // if err != nil { // t.Fatalf(err.Error()) // } // // Cleanup // err = tm.DeleteSssMgr() // if err != nil { // t.Fatalf("Failed to cleanup SSS Asset Manager") // } // tm = nil // } // func TestSensorDiscoveryInfoAllHttp(t *testing.T) { // fmt.Println("--- ", t.Name()) // log.MeepTextLogInit(t.Name()) // // Valid Connector // fmt.Println("Create valid SSS Asset Manager") // tm, err := NewSssMgr(tmName, tmNamespace, "REST_HTTP", "", 0, "7feaadbb0400", "laboai-acme-ic-cse", nil, nil, nil) // if err != nil || tm == nil { // t.Fatalf("Failed to create SSS Asset Manager") // } // sensors, err := tm.SensorDiscoveryInfoAll() // if err != nil { // t.Fatalf(err.Error()) // } // fmt.Println("len=", len(sensors)) // fmt.Println("sensors", sensors) // // Cleanup // err = tm.DeleteSssMgr() // if err != nil { // t.Fatalf("Failed to cleanup SSS Asset Manager") // } // tm = nil // } // func TestGetSensorHttp(t *testing.T) { // fmt.Println("--- ", t.Name()) // log.MeepTextLogInit(t.Name()) // // Valid Connector // fmt.Println("Create valid SSS Asset Manager") // tm, err := NewSssMgr(tmName, tmNamespace, "REST_HTTP", "lab-oai.etsi.org", 31110, "7feaadbb0400", "laboai-acme-ic-cse", nil, nil, nil) // if err != nil || tm == nil { // t.Fatalf("Failed to create SSS Asset Manager") // } // sensors, err := tm.SensorDiscoveryInfoAll() // if err != nil { // t.Fatalf(err.Error()) // } // for _, v := range sensors { // fmt.Println("v", v) // fmt.Println("TypeOf(v)", reflect.TypeOf(v)) // sensor, err := tm.GetSensor(v.SensorIdentifier) // if !validate_sensor_discovery_info(v, sensor) { // t.Fatalf(err.Error()) // } // } // // Cleanup // err = tm.DeleteSssMgr() // if err != nil { // t.Fatalf("Failed to cleanup SSS Asset Manager") // } // tm = nil // } // func TestOneM2M_createAEHttp(t *testing.T) { // fmt.Println("--- ", t.Name()) // log.MeepTextLogInit(t.Name()) // // Valid Connector // fmt.Println("Create valid SSS Asset Manager") // tm, err := NewSssMgr(tmName, tmNamespace, "REST_HTTP", "lab-oai.etsi.org", 31110, "7feaadbb0400", "laboai-acme-ic-cse", nil, nil, nil) // if err != nil || tm == nil { // t.Fatalf("Failed to create SSS Asset Manager") // } // var new_sensor = SensorDiscoveryInfo{ // SensorIdentifier: "12345", // SensorType: "AE", // SensorPosition: nil, // IotPlatformId: "7feaadbb0400", // } // sensor, err := tm.OneM2M_create(new_sensor, "") // if err != nil { // t.Fatalf("Failed to create new sensor") // } // // Verify content // fmt.Println(">>> validate_sensor_discovery_info_1: expected_sensor: ", new_sensor) // fmt.Println(">>> validate_sensor_discovery_info_1: received_sensor: ", sensor) // // if sensor.SensorIdentifier != new_sensor.SensorIdentifier { // FIXME FSCOM SensorIdentifier will be replaced by oneM2M ri // // t.Fatalf("received_sensor.SensorIdentifier != SensorIdentifier") // // } // if sensor.SensorType != new_sensor.SensorType { // t.Fatalf("received_sensor.SensorType != SensorType") // } // if sensor.IotPlatformId != new_sensor.IotPlatformId { // t.Fatalf("received_sensor.IotPlatformId != IotPlatformId") // } // if len(sensor.SensorCharacteristicList) == 0 { // t.Fatalf("received_sensor.SensorCharacteristicList shall not be empty") // } // _ = tm.OneM2M_Delete(sensor) // // Cleanup // err = tm.DeleteSssMgr() // if err != nil { // t.Fatalf("Failed to cleanup SSS Asset Manager") // } // tm = nil // } func TestOneM2M_createAE_CNTHttp(t *testing.T) { fmt.Println("--- ", t.Name()) log.MeepTextLogInit(t.Name()) // Valid Connector fmt.Println("Create valid SSS Asset Manager") tm, err := NewSssMgr(tmName, tmNamespace, "REST_HTTP", "lab-oai.etsi.org", 31110, "7feaadbb0400", "laboai-acme-ic-cse", nil, nil, nil) if err != nil || tm == nil { t.Fatalf("Failed to create SSS Asset Manager") } var sensor_ae = SensorDiscoveryInfo{ SensorIdentifier: "CMyAE", SensorType: "AE", SensorPosition: nil, IotPlatformId: "7feaadbb0400", } new_sensor_ae, err := tm.OneM2M_create(sensor_ae, "") if err != nil { t.Fatalf("Failed to create new AE sensor") } // Verify content fmt.Println(">>> validate_sensor_discovery_info_1: expected_sensor: ", sensor_ae) fmt.Println(">>> validate_sensor_discovery_info_1: received_sensor: ", new_sensor_ae) // if sensor.SensorIdentifier != new_sensor.SensorIdentifier { // FIXME FSCOM SensorIdentifier will be replaced by oneM2M ri // t.Fatalf("received_sensor.SensorIdentifier != SensorIdentifier") // } if new_sensor_ae.SensorType != new_sensor_ae.SensorType { t.Fatalf("received_sensor.SensorType != SensorType") } if new_sensor_ae.IotPlatformId != sensor_ae.IotPlatformId { t.Fatalf("received_sensor.IotPlatformId != IotPlatformId") } if len(new_sensor_ae.SensorCharacteristicList) == 0 { t.Fatalf("received_sensor.SensorCharacteristicList shall not be empty") } var sensor_cnt = SensorDiscoveryInfo{ SensorIdentifier: "CMyCNT", SensorType: "CNT", SensorPosition: nil, IotPlatformId: "7feaadbb0400", } // sensor_cnt.SensorCharacteristicList = make([]SensorCharacteristic, 1) // sensor_cnt.SensorCharacteristicList[0] = SensorCharacteristic{CharacteristicName: "con", CharacteristicValue: "OFF"} sensorPath := new_sensor_ae.SensorIdentifier new_sensor_cnt, err := tm.OneM2M_create(sensor_cnt, sensorPath) if err != nil { t.Fatalf("Failed to create new sensor") } if new_sensor_cnt.SensorType != sensor_cnt.SensorType { t.Fatalf("received_sensor.SensorType != SensorType") } if new_sensor_cnt.IotPlatformId != sensor_cnt.IotPlatformId { t.Fatalf("received_sensor.IotPlatformId != IotPlatformId") } if len(new_sensor_cnt.SensorCharacteristicList) == 0 { t.Fatalf("received_sensor.SensorCharacteristicList shall not be empty") } err = tm.OneM2M_Delete(new_sensor_cnt) if err != nil { t.Fatalf("Failed to create new sensor") } err = tm.OneM2M_Delete(new_sensor_ae) if err != nil { t.Fatalf("Failed to create new sensor") } // Cleanup err = tm.DeleteSssMgr() if err != nil { t.Fatalf("Failed to cleanup SSS Asset Manager") } tm = nil } // func TestOneM2M_deleteHttp(t *testing.T) { // fmt.Println("--- ", t.Name()) // log.MeepTextLogInit(t.Name()) // // Valid Connector // fmt.Println("Create valid SSS Asset Manager") // tm, err := NewSssMgr(tmName, tmNamespace, "REST_HTTP", "lab-oai.etsi.org", 31110, "7feaadbb0400", "laboai-acme-ic-cse", nil, nil, nil) // if err != nil || tm == nil { // t.Fatalf("Failed to create SSS Asset Manager") // } // var new_sensor = SensorDiscoveryInfo{ // SensorIdentifier: "12345", // SensorType: "AE", // SensorPosition: nil, // IotPlatformId: "7feaadbb0400", // } // sensor, err := oneM2M_create(tm, new_sensor) // if err != nil { // t.Fatalf("Failed to create new sensor: ", err.Error()) // } // err = tm.OneM2M_Delete(sensor) // if err != nil { // t.Fatalf("Failed to create new sensor: ", err.Error()) // } // // Cleanup // err = tm.DeleteSssMgr() // if err != nil { // t.Fatalf("Failed to cleanup SSS Asset Manager") // } // tm = nil // } // func TestPopulateDevicesPerIotPlatformsMqtt(t *testing.T) { // fmt.Println("--- ", t.Name()) // log.MeepTextLogInit(t.Name()) // // Valid Connector // fmt.Println("Create valid SSS Asset Manager") // tm, err := NewSssMgr(tmName, tmNamespace, "MQTT", "172.29.10.56", 1883, "7feaadbb0400", "laboai-acme-ic-cse", nil, nil, nil) // if err != nil || tm == nil { // t.Fatalf("Failed to create SSS Asset Manager") // } // err = tm.populateDevicesPerIotPlatforms() // if err != nil { // t.Fatalf(err.Error()) // } // // Cleanup // err = tm.DeleteSssMgr() // if err != nil { // t.Fatalf("Failed to cleanup SSS Asset Manager") // } // tm = nil // } // func TestSensorDiscoveryInfoAllMqtt(t *testing.T) { // fmt.Println("--- ", t.Name()) // log.MeepTextLogInit(t.Name()) // // Valid Connector // fmt.Println("Create valid SSS Asset Manager") // tm, err := NewSssMgr(tmName, tmNamespace, "MQTT", "172.29.10.56", 1883, "7feaadbb0400", "laboai-acme-ic-cse", nil, nil, nil) // if err != nil || tm == nil { // t.Fatalf("Failed to create SSS Asset Manager") // } // err = tm.populateDevicesPerIotPlatforms() // if err != nil { // t.Fatalf(err.Error()) // } // sensors, err := tm.SensorDiscoveryInfoAll() // if err != nil { // t.Fatalf(err.Error()) // } // fmt.Println("sensors: ", sensors) // // Cleanup // err = tm.DeleteSssMgr() // if err != nil { // t.Fatalf("Failed to cleanup SSS Asset Manager") // } // } // func TestGetSensorMqtt(t *testing.T) { // fmt.Println("--- ", t.Name()) // log.MeepTextLogInit(t.Name()) // // Valid Connector // fmt.Println("Create valid SSS Asset Manager") // tm, err := NewSssMgr(tmName, tmNamespace, "MQTT", "172.29.10.56", 1883, "7feaadbb0400", "laboai-acme-ic-cse", nil, nil, nil) // if err != nil || tm == nil { // t.Fatalf("Failed to create SSS Asset Manager") // } // sensors, err := tm.SensorDiscoveryInfoAll() // if err != nil { // t.Fatalf(err.Error()) // } // for _, v := range sensors { // fmt.Println("v", v) // fmt.Println("TypeOf(v)", reflect.TypeOf(v)) // sensor, err := tm.GetSensor(v.SensorIdentifier) // if !validate_sensor_discovery_info(v, sensor) { // t.Fatalf(err.Error()) // } // } // // Cleanup // err = tm.DeleteSssMgr() // if err != nil { // t.Fatalf("Failed to cleanup SSS Asset Manager") // } // tm = nil // } // func TestOneM2M_createAEMQTT(t *testing.T) { // fmt.Println("--- ", t.Name()) // log.MeepTextLogInit(t.Name()) // // Valid Connector // fmt.Println("Create valid SSS Asset Manager") // tm, err := NewSssMgr(tmName, tmNamespace, "MQTT", "172.29.10.56", 1883, "7feaadbb0400", "laboai-acme-ic-cse", nil, nil, nil) // if err != nil || tm == nil { // t.Fatalf("Failed to create SSS Asset Manager") // } // var new_sensor = SensorDiscoveryInfo{ // SensorIdentifier: "12345", // SensorType: "AE", // SensorPosition: nil, // IotPlatformId: "7feaadbb0400", // } // sensor, err := tm.OneM2M_create(new_sensor, "") // if err != nil { // t.Fatalf("Failed to create new sensor") // } // // Verify content // fmt.Println(">>> validate_sensor_discovery_info_1: expected_sensor: ", new_sensor) // fmt.Println(">>> validate_sensor_discovery_info_1: received_sensor: ", sensor) // // if sensor.SensorIdentifier != new_sensor.SensorIdentifier { // FIXME FSCOM SensorIdentifier will be replaced by oneM2M ri // // t.Fatalf("received_sensor.SensorIdentifier != SensorIdentifier") // // } // if sensor.SensorType != new_sensor.SensorType { // t.Fatalf("received_sensor.SensorType != SensorType") // } // if sensor.IotPlatformId != new_sensor.IotPlatformId { // t.Fatalf("received_sensor.IotPlatformId != IotPlatformId") // } // if len(sensor.SensorCharacteristicList) == 0 { // t.Fatalf("received_sensor.SensorCharacteristicList shall not be empty") // } // _ = tm.OneM2M_Delete(sensor) // // Cleanup // err = tm.DeleteSssMgr() // if err != nil { // t.Fatalf("Failed to cleanup SSS Asset Manager") // } // tm = nil // } // func TestOneM2M_deleteMQTT(t *testing.T) { // fmt.Println("--- ", t.Name()) // log.MeepTextLogInit(t.Name()) // // Valid Connector // fmt.Println("Create valid SSS Asset Manager") // tm, err := NewSssMgr(tmName, tmNamespace, "MQTT", "172.29.10.56", 1883, "7feaadbb0400", "laboai-acme-ic-cse", nil, nil, nil) // if err != nil || tm == nil { // t.Fatalf("Failed to create SSS Asset Manager") // } // var new_sensor = SensorDiscoveryInfo{ // SensorIdentifier: "12345", // SensorType: "AE", // SensorPosition: nil, // IotPlatformId: "7feaadbb0400", // } // sensor, err := oneM2M_create(tm, new_sensor, "") // if err != nil { // t.Fatalf("Failed to create new sensor: " + err.Error()) // } // err = tm.OneM2M_Delete(sensor) // if err != nil { // t.Fatalf("Failed to create new sensor: " + err.Error()) // } // // Cleanup // err = tm.DeleteSssMgr() // if err != nil { // t.Fatalf("Failed to cleanup SSS Asset Manager") // } // tm = nil // } // func TestVaidateOneM2MNotificationServer(t *testing.T) { // fmt.Println("--- ", t.Name()) // log.MeepTextLogInit(t.Name()) // // Valid Connector // fmt.Println("Create valid SSS Asset Manager") // tm, err := NewSssMgr(tmName, tmNamespace, "MQTT", "172.29.10.56", 1883, "MQTT", "172.29.10.56", 1883, "7feaadbb0400", "laboai-acme-ic-cse", nil, nil, nil) // if err != nil || tm == nil { // t.Fatalf("Failed to create SSS Asset Manager") // } // tm.init() // fmt.Println("Waiting for 2 minutes to do curl request: curl -v http://mec-platform.etsi.org:33122/sbxykqjr17/mep1/sens/v1 ") // // Cleanup // err = tm.DeleteSssMgr() // if err != nil { // t.Fatalf("Failed to cleanup SSS Asset Manager") // } // } func oneM2M_create(tm *SssMgr, sensor SensorDiscoveryInfo, path string) (sensorResp SensorDiscoveryInfo, err error) { sensorResp, err = tm.OneM2M_create(sensor, path) if err != nil { return sensorResp, err } return sensorResp, nil } func validate_sensor_discovery_info(expected_sensor SensorDiscoveryInfo, received_sensor SensorDiscoveryInfo) bool { fmt.Println(">>> validate_sensor_discovery_info: expected_sensor: ", expected_sensor) fmt.Println(">>> validate_sensor_discovery_info: received_sensor: ", received_sensor) if expected_sensor.SensorIdentifier != received_sensor.SensorIdentifier { fmt.Println("received_sensor.SensorIdentifier != SensorIdentifier") return false } if len(expected_sensor.SensorPropertyList) != len(received_sensor.SensorPropertyList) { fmt.Println("len(received_sensor.SensorPropertyList) != len(SensorPropertyList)") return false } else if !reflect.DeepEqual(expected_sensor.SensorPropertyList, received_sensor.SensorPropertyList) { fmt.Println("received_sensor.SensorPropertyList != SensorPropertyList") } if len(expected_sensor.SensorCharacteristicList) != len(received_sensor.SensorCharacteristicList) { fmt.Println("len(received_sensor.SensorCharacteristicList) != len(SensorCharacteristicList)") return false } else if !reflect.DeepEqual(expected_sensor.SensorCharacteristicList, received_sensor.SensorCharacteristicList) { fmt.Println("received_sensor.SensorCharacteristicList != SensorCharacteristicList") } // TODO To be continued return true }