def test_post_processing_in_dp_mode(self) -> None: """ Test FreedomFi One specific post processing functionality in Domain Proxy mode""" service_cfg = _get_service_config() expected = [ call.delete_parameter(ParameterName.EARFCNDL), call.delete_parameter(ParameterName.DL_BANDWIDTH), call.delete_parameter(ParameterName.UL_BANDWIDTH), call.set_parameter( param_name=FreedomFiOneMiscParameters.TUNNEL_REF, value='Device.IP.Interface.1.IPv4Address.1.', ), call.set_parameter( param_name=FreedomFiOneMiscParameters.CARRIER_AGG_ENABLE, value=True), call.set_parameter( param_name=FreedomFiOneMiscParameters.CARRIER_NUMBER, value=2), call.set_parameter( param_name=FreedomFiOneMiscParameters.CONTIGUOUS_CC, value=0), call.set_parameter( param_name=FreedomFiOneMiscParameters.WEB_UI_ENABLE, value=False), call.set_parameter(param_name=SASParameters.SAS_ENABLE, value=True), call.set_parameter(param_name=SASParameters.SAS_METHOD, value=False), call.set_parameter_for_object( param_name='PLMN 1 cell reserved', value=True, object_name='PLMN 1', ), call.set_parameter(SASParameters.SAS_METHOD, value=True), call.set_parameter(FreedomFiOneMiscParameters.PRIM_SOURCE, 'GNSS'), ] self._check_postprocessing(expected=expected, service_cfg=service_cfg)
def test_post_process_without_sas_cfg_with_ui(self) -> None: """ Test FreedomFi One specific post processing functionality without sas config with ui enabled""" service_cfg = { "tr069": { "interface": "eth1", "port": 48080, "perf_mgmt_port": 8081, "public_ip": "192.88.99.142", }, "prim_src": 'GNSS', "reboot_enodeb_on_mme_disconnected": True, "s1_interface": "eth1", "web_ui_enable_list": ["2006CW5000023"], } expected = [ call.delete_parameter(ParameterName.EARFCNDL), call.delete_parameter(ParameterName.DL_BANDWIDTH), call.delete_parameter(ParameterName.UL_BANDWIDTH), call.set_parameter( param_name=FreedomFiOneMiscParameters.TUNNEL_REF, value='Device.IP.Interface.1.IPv4Address.1.', ), call.set_parameter( param_name=FreedomFiOneMiscParameters.CARRIER_AGG_ENABLE, value=True), call.set_parameter( param_name=FreedomFiOneMiscParameters.CARRIER_NUMBER, value=2), call.set_parameter( param_name=FreedomFiOneMiscParameters.CONTIGUOUS_CC, value=0), call.set_parameter( param_name=FreedomFiOneMiscParameters.WEB_UI_ENABLE, value=False), call.set_parameter(param_name=SASParameters.SAS_ENABLE, value=True), call.set_parameter(param_name=SASParameters.SAS_METHOD, value=False), call.set_parameter_for_object( param_name='PLMN 1 cell reserved', value=True, object_name='PLMN 1', ), call.set_parameter(FreedomFiOneMiscParameters.WEB_UI_ENABLE, value=True), call.set_parameter(SASParameters.SAS_METHOD, value=True), call.set_parameter(FreedomFiOneMiscParameters.PRIM_SOURCE, 'GNSS'), ] self._check_postprocessing(expected=expected, service_cfg=service_cfg)
def test_status_nodes(self): """ Test that the status of the node is valid""" status = StatusParameters() # Happy path n1 = { StatusParameters.DEFAULT_GW: "SUCCESS", StatusParameters.SYNC_STATUS: "InSync", StatusParameters.ENB_STATUS: "Success", StatusParameters.SAS_STATUS: "Success", StatusParameters.GPS_SCAN_STATUS: "SUCCESS", ParameterName.GPS_LONG: "1", ParameterName.GPS_LAT: "1", } device_config = Mock() status.set_magma_device_cfg(n1, device_config) expected = [ call.set_parameter(param_name='RF TX status', value=True), call.set_parameter(param_name='GPS status', value=True), call.set_parameter(param_name='PTP status', value=True), call.set_parameter(param_name='MME status', value=True), call.set_parameter(param_name='Opstate', value=True), call.set_parameter('GPS lat', '1'), call.set_parameter('GPS long', '1'), ] self.assertEqual(expected, device_config.mock_calls) n2 = n1.copy() # Verify we can handle specific none params n2[StatusParameters.DEFAULT_GW] = None n3 = n1.copy() n3[StatusParameters.SYNC_STATUS] = None n4 = n1.copy() n4[StatusParameters.ENB_STATUS] = None n5 = n1.copy() n5[StatusParameters.SAS_STATUS] = None n6 = n1.copy() n6[StatusParameters.GPS_SCAN_STATUS] = None n7 = n1.copy() n7[ParameterName.GPS_LONG] = None n8 = n1.copy() n8[ParameterName.GPS_LAT] = None device_config = Mock() expected = [ call.set_parameter(param_name='RF TX status', value=True), call.set_parameter(param_name='GPS status', value=True), call.set_parameter(param_name='PTP status', value=True), call.set_parameter(param_name='MME status', value=False), call.set_parameter(param_name='Opstate', value=True), call.set_parameter('GPS lat', '1'), call.set_parameter('GPS long', '1'), ] status.set_magma_device_cfg(n2, device_config) self.assertEqual(expected, device_config.mock_calls) device_config = Mock() expected = [ call.set_parameter(param_name='RF TX status', value=True), call.set_parameter(param_name='GPS status', value=True), call.set_parameter(param_name='PTP status', value=False), call.set_parameter(param_name='MME status', value=True), call.set_parameter(param_name='Opstate', value=True), call.set_parameter('GPS lat', '1'), call.set_parameter('GPS long', '1'), ] status.set_magma_device_cfg(n3, device_config) self.assertEqual(expected, device_config.mock_calls) device_config = Mock() expected = [ call.set_parameter(param_name='RF TX status', value=True), call.set_parameter(param_name='GPS status', value=True), call.set_parameter(param_name='PTP status', value=True), call.set_parameter(param_name='MME status', value=True), call.set_parameter(param_name='Opstate', value=False), call.set_parameter('GPS lat', '1'), call.set_parameter('GPS long', '1'), ] status.set_magma_device_cfg(n4, device_config) self.assertEqual(expected, device_config.mock_calls) device_config = Mock() expected = [ call.set_parameter(param_name='RF TX status', value=False), call.set_parameter(param_name='GPS status', value=True), call.set_parameter(param_name='PTP status', value=True), call.set_parameter(param_name='MME status', value=True), call.set_parameter(param_name='Opstate', value=True), call.set_parameter('GPS lat', '1'), call.set_parameter('GPS long', '1'), ] status.set_magma_device_cfg(n5, device_config) self.assertEqual(expected, device_config.mock_calls) device_config = Mock() expected = [ call.set_parameter(param_name='RF TX status', value=True), call.set_parameter(param_name='GPS status', value=False), call.set_parameter(param_name='PTP status', value=False), call.set_parameter(param_name='MME status', value=True), call.set_parameter(param_name='Opstate', value=True), call.set_parameter('GPS lat', '1'), call.set_parameter('GPS long', '1'), ] status.set_magma_device_cfg(n6, device_config) self.assertEqual(expected, device_config.mock_calls) device_config = Mock() expected = [ call.set_parameter(param_name='RF TX status', value=True), call.set_parameter(param_name='GPS status', value=True), call.set_parameter(param_name='PTP status', value=True), call.set_parameter(param_name='MME status', value=True), call.set_parameter(param_name='Opstate', value=True), call.set_parameter('GPS lat', '1'), call.set_parameter('GPS long', None), ] status.set_magma_device_cfg(n7, device_config) self.assertEqual(expected, device_config.mock_calls) device_config = Mock() expected = [ call.set_parameter(param_name='RF TX status', value=True), call.set_parameter(param_name='GPS status', value=True), call.set_parameter(param_name='PTP status', value=True), call.set_parameter(param_name='MME status', value=True), call.set_parameter(param_name='Opstate', value=True), call.set_parameter('GPS lat', None), call.set_parameter('GPS long', '1'), ] status.set_magma_device_cfg(n8, device_config) self.assertEqual(expected, device_config.mock_calls)
def test_post_processing_in_non_dp_mode(self) -> None: """ Test FreedomFi One specific post processing functionality in standalone mode""" service_cfg = _get_service_config(dp_mode=False) expected = [ call.delete_parameter(ParameterName.EARFCNDL), call.delete_parameter(ParameterName.DL_BANDWIDTH), call.delete_parameter(ParameterName.UL_BANDWIDTH), call.set_parameter( param_name=FreedomFiOneMiscParameters.TUNNEL_REF, value='Device.IP.Interface.1.IPv4Address.1.', ), call.set_parameter( param_name=FreedomFiOneMiscParameters.CARRIER_AGG_ENABLE, value=True), call.set_parameter( param_name=FreedomFiOneMiscParameters.CARRIER_NUMBER, value=2), call.set_parameter( param_name=FreedomFiOneMiscParameters.CONTIGUOUS_CC, value=0), call.set_parameter( param_name=FreedomFiOneMiscParameters.WEB_UI_ENABLE, value=False), call.set_parameter(param_name=SASParameters.SAS_ENABLE, value=True), call.set_parameter(param_name=SASParameters.SAS_METHOD, value=False), call.set_parameter_for_object( param_name='PLMN 1 cell reserved', value=True, object_name='PLMN 1', ), call.set_parameter( SASParameters.SAS_SERVER_URL, TEST_SAS_URL, ), call.set_parameter(SASParameters.SAS_UID, 'M0LK4T'), call.set_parameter(SASParameters.SAS_CATEGORY, 'A'), call.set_parameter(SASParameters.SAS_CHANNEL_TYPE, 'GAA'), call.set_parameter( SASParameters.SAS_CERT_SUBJECT, TEST_SAS_CERT_SUBJECT, ), call.set_parameter(SASParameters.SAS_LOCATION, 'indoor'), call.set_parameter(SASParameters.SAS_HEIGHT_TYPE, 'AMSL'), call.set_parameter(FreedomFiOneMiscParameters.PRIM_SOURCE, 'GNSS'), ] self._check_postprocessing(expected=expected, service_cfg=service_cfg)
def test_post_processing(self) -> None: """ Test FreedomFi One specific post processing functionality""" acs_state_machine = self.build_freedomfi_one_acs_state_machine() cfg_desired = Mock() acs_state_machine.device_cfg.set_parameter( ParameterName.SERIAL_NUMBER, "2006CW5000023", ) cfg_init = FreedomFiOneConfigurationInitializer(acs_state_machine) cfg_init.postprocess( EnodebConfigBuilder.get_mconfig(), self._get_service_config(), cfg_desired, ) expected = [ call.delete_parameter('EARFCNDL'), call.delete_parameter('DL bandwidth'), call.delete_parameter('UL bandwidth'), call.set_parameter( 'tunnel_ref', 'Device.IP.Interface.1.IPv4Address.1.', ), call.set_parameter('prim_src', 'GNSS'), call.set_parameter('carrier_agg_enable', True), call.set_parameter('carrier_number', 2), call.set_parameter('contiguous_cc', 0), call.set_parameter('web_ui_enable', False), call.set_parameter('sas_enabled', True), call.set_parameter( 'sas_server_url', 'https://spectrum-connect.federatedwireless.com/v1.2/', ), call.set_parameter('sas_uid', 'M0LK4T'), call.set_parameter('sas_category', 'A'), call.set_parameter('sas_channel_type', 'GAA'), call.set_parameter( 'sas_cert_subject', '/C=TW/O=Sercomm/OU=WInnForum CBSD Certificate/CN=P27-SCE4255W:%s', ), call.set_parameter('sas_location', 'indoor'), call.set_parameter('sas_height_type', 'AMSL'), ] self.assertEqual(cfg_desired.mock_calls.sort(), expected.sort()) # Check without sas config service_cfg = { "tr069": { "interface": "eth1", "port": 48080, "perf_mgmt_port": 8081, "public_ip": "192.88.99.142", }, "reboot_enodeb_on_mme_disconnected": True, "s1_interface": "eth1", } cfg_desired = Mock() cfg_init.postprocess( EnodebConfigBuilder.get_mconfig(), service_cfg, cfg_desired, ) expected = [ call.delete_parameter('EARFCNDL'), call.delete_parameter('DL bandwidth'), call.delete_parameter('UL bandwidth'), call.set_parameter( 'tunnel_ref', 'Device.IP.Interface.1.IPv4Address.1.', ), call.set_parameter('prim_src', 'GNSS'), call.set_parameter('carrier_agg_enable', True), call.set_parameter('carrier_number', 2), call.set_parameter('contiguous_cc', 0), call.set_parameter('web_ui_enable', False), ] self.assertEqual(cfg_desired.mock_calls.sort(), expected.sort()) service_cfg['web_ui_enable_list'] = ["2006CW5000023"] expected = [ call.delete_parameter('EARFCNDL'), call.delete_parameter('DL bandwidth'), call.delete_parameter('UL bandwidth'), call.set_parameter( 'tunnel_ref', 'Device.IP.Interface.1.IPv4Address.1.', ), call.set_parameter('prim_src', 'GNSS'), call.set_parameter('carrier_agg_enable', True), call.set_parameter('carrier_number', 2), call.set_parameter('contiguous_cc', 0), call.set_parameter('web_ui_enable', False), call.set_parameter('web_ui_enable', True), ] cfg_desired = Mock() cfg_init.postprocess( EnodebConfigBuilder.get_mconfig(), service_cfg, cfg_desired, ) print(cfg_desired.mock_calls) print(type(cfg_desired.mock_calls)) self.assertEqual(cfg_desired.mock_calls.sort(), expected.sort())
def test_post_processing(self, sas_enabled, prim_src) -> None: """ Test FreedomFi One specific post processing functionality""" acs_state_machine = EnodebAcsStateMachineBuilder.build_acs_state_machine( EnodebDeviceName.FREEDOMFI_ONE) cfg_desired = Mock() acs_state_machine.device_cfg.set_parameter( ParameterName.SERIAL_NUMBER, "2006CW5000023", ) cfg_init = FreedomFiOneConfigurationInitializer(acs_state_machine) cfg_init.postprocess( EnodebConfigBuilder.get_mconfig(), get_service_config(sas_enabled=sas_enabled, prim_src=prim_src), cfg_desired, ) expected = [ call.delete_parameter('EARFCNDL'), call.delete_parameter('DL bandwidth'), call.delete_parameter('UL bandwidth'), call.set_parameter( 'tunnel_ref', value='Device.IP.Interface.1.IPv4Address.1.', ), call.set_parameter('prim_src', prim_src), call.set_parameter('carrier_agg_enable', value=True), call.set_parameter('carrier_number', value=2), call.set_parameter('contiguous_cc', value=0), call.set_parameter('web_ui_enable', value=False), call.set_parameter('sas_enabled', sas_enabled), call.set_parameter_for_object( param_name='PLMN 1 cell reserved', value=True, object_name='PLMN 1', ), ] if sas_enabled: expected += [ call.set_parameter( 'sas_server_url', 'https://spectrum-connect.federatedwireless.com/v1.2/', ), call.set_parameter('sas_uid', 'M0LK4T'), call.set_parameter('sas_category', 'A'), call.set_parameter('sas_channel_type', 'GAA'), call.set_parameter( 'sas_cert_subject', '/C=TW/O=Sercomm/OU=WInnForum CBSD Certificate/CN=P27-SCE4255W:%s', ), call.set_parameter('sas_location', 'indoor'), call.set_parameter('sas_height_type', 'AMSL'), ] cfg_desired.assert_has_calls(expected, any_order=True) # Check without sas config service_cfg = { "tr069": { "interface": "eth1", "port": 48080, "perf_mgmt_port": 8081, "public_ip": "192.88.99.142", }, "prim_src": prim_src, "reboot_enodeb_on_mme_disconnected": True, "s1_interface": "eth1", } cfg_desired = Mock() cfg_init.postprocess( EnodebConfigBuilder.get_mconfig(), service_cfg, cfg_desired, ) expected = [ call.delete_parameter('EARFCNDL'), call.delete_parameter('DL bandwidth'), call.delete_parameter('UL bandwidth'), call.set_parameter( 'tunnel_ref', value='Device.IP.Interface.1.IPv4Address.1.', ), call.set_parameter('sas_enabled', False), call.set_parameter('prim_src', prim_src), call.set_parameter('carrier_agg_enable', value=True), call.set_parameter('carrier_number', value=2), call.set_parameter('contiguous_cc', value=0), call.set_parameter('web_ui_enable', value=False), call.set_parameter_for_object( param_name='PLMN 1 cell reserved', value=True, object_name='PLMN 1', ), ] cfg_desired.assert_has_calls(expected, any_order=True) service_cfg['web_ui_enable_list'] = ["2006CW5000023"] expected = [ call.delete_parameter('EARFCNDL'), call.delete_parameter('DL bandwidth'), call.delete_parameter('UL bandwidth'), call.set_parameter( 'tunnel_ref', value='Device.IP.Interface.1.IPv4Address.1.', ), call.set_parameter('sas_enabled', False), call.set_parameter('prim_src', prim_src), call.set_parameter('carrier_agg_enable', value=True), call.set_parameter('carrier_number', value=2), call.set_parameter('contiguous_cc', value=0), call.set_parameter('web_ui_enable', value=False), call.set_parameter('web_ui_enable', value=True), call.set_parameter_for_object( param_name='PLMN 1 cell reserved', value=True, object_name='PLMN 1', ), ] cfg_desired = Mock() cfg_init.postprocess( EnodebConfigBuilder.get_mconfig(), service_cfg, cfg_desired, ) cfg_desired.assert_has_calls(expected, any_order=True)