Example #1
0
    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)
Example #2
0
    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)
Example #3
0
    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)
Example #4
0
    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)
Example #5
0
    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())
Example #6
0
    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)