def test_feature_update(mock_sonic_db, manifest):
    curr_feature_config = {
        'state': 'enabled',
        'auto_restart': 'enabled',
        'high_mem_alert': 'disabled',
        'set_owner': 'local',
        'has_per_asic_scope': 'False',
        'has_global_scope': 'True',
        'has_timer': 'False',
        'check_up_status': 'False',
    }
    mock_connector = Mock()
    mock_connector.get_entry = Mock(return_value=curr_feature_config)
    mock_sonic_db.get_connectors = Mock(return_value=[mock_connector])
    feature_registry = FeatureRegistry(mock_sonic_db)

    new_manifest = copy.deepcopy(manifest)
    new_manifest['service']['name'] = 'test_new'
    new_manifest['service']['delayed'] = True

    feature_registry.update(manifest, new_manifest)

    mock_connector.set_entry.assert_has_calls([
        call('FEATURE', 'test', None),
        call('FEATURE', 'test_new', {
            'state': 'enabled',
            'auto_restart': 'enabled',
            'high_mem_alert': 'disabled',
            'set_owner': 'local',
            'has_per_asic_scope': 'False',
            'has_global_scope': 'True',
            'has_timer': 'True',
            'check_up_status': 'False',
        }),
    ], any_order=True)
def test_auto_ts_global_enabled(mock_sonic_db, manifest):
    mock_init_cfg = Mock()
    AutoTSHelp.GLOBAL_STATE = {"state" : "enabled"}
    mock_init_cfg.get_entry = Mock(side_effect=AutoTSHelp.get_entry)
    mock_sonic_db.get_connectors = Mock(return_value=[mock_init_cfg])
    mock_sonic_db.get_initial_db_connector = Mock(return_value=mock_init_cfg)
    feature_registry = FeatureRegistry(mock_sonic_db)
    feature_registry.register(manifest)
    mock_init_cfg.set_entry.assert_any_call("AUTO_TECHSUPPORT_FEATURE", "test", {
            "state" : "enabled",
            "rate_limit_interval" : "600"
        }
    )
示例#3
0
def test_feature_registration_with_non_default_owner(mock_sonic_db, manifest):
    mock_connector = Mock()
    mock_connector.get_entry = Mock(return_value={})
    mock_sonic_db.get_connectors = Mock(return_value=[mock_connector])
    feature_registry = FeatureRegistry(mock_sonic_db)
    feature_registry.register(manifest, owner='kube')
    mock_connector.set_entry.assert_called_with('FEATURE', 'test', {
        'state': 'disabled',
        'auto_restart': 'enabled',
        'high_mem_alert': 'disabled',
        'set_owner': 'kube',
        'has_per_asic_scope': 'False',
        'has_global_scope': 'True',
        'has_timer': 'False',
    })
示例#4
0
def test_feature_registration_with_non_default_owner(mock_sonic_db, manifest):
    mock_feature_table = Mock()
    mock_feature_table.get = Mock(return_value=(False, ()))
    mock_sonic_db.initial_table = Mock(return_value=mock_feature_table)
    mock_sonic_db.persistent_table = Mock(return_value=mock_feature_table)
    mock_sonic_db.running_table = Mock(return_value=mock_feature_table)
    feature_registry = FeatureRegistry(mock_sonic_db)
    feature_registry.register(manifest, owner='kube')
    mock_feature_table.set.assert_called_with('test', [
        ('state', 'disabled'),
        ('auto_restart', 'enabled'),
        ('high_mem_alert', 'disabled'),
        ('set_owner', 'kube'),
        ('has_per_asic_scope', 'False'),
        ('has_global_scope', 'True'),
        ('has_timer', 'False'),
    ])
def test_feature_registration_with_timer(mock_sonic_db, manifest):
    manifest['service']['delayed'] = True
    mock_connector = Mock()
    mock_connector.get_entry = Mock(return_value={})
    mock_sonic_db.get_connectors = Mock(return_value=[mock_connector])
    mock_sonic_db.get_initial_db_connector = Mock(return_value=mock_connector)
    feature_registry = FeatureRegistry(mock_sonic_db)
    feature_registry.register(manifest)
    mock_connector.set_entry.assert_called_with('FEATURE', 'test', {
        'state': 'disabled',
        'auto_restart': 'enabled',
        'high_mem_alert': 'disabled',
        'set_owner': 'local',
        'has_per_asic_scope': 'False',
        'has_global_scope': 'True',
        'has_timer': 'True',
    })
def test_auto_ts_feature_update_flow(mock_sonic_db, manifest):
    new_manifest = copy.deepcopy(manifest)
    new_manifest['service']['name'] = 'test_new'
    new_manifest['service']['delayed'] = True
    
    AutoTSHelp.GLOBAL_STATE = {"state" : "enabled"}
    # Mock init_cfg connector
    mock_init_cfg = Mock()
    mock_init_cfg.get_entry = Mock(side_effect=AutoTSHelp.get_entry)

    # Mock running/peristent cfg connector
    mock_other_cfg = Mock()
    mock_other_cfg.get_entry = Mock(side_effect=AutoTSHelp.get_entry_running_cfg)

    # Setup sonic_db class
    mock_sonic_db.get_connectors = Mock(return_value=[mock_init_cfg, mock_other_cfg])
    mock_sonic_db.get_initial_db_connector = Mock(return_value=mock_init_cfg)

    feature_registry = FeatureRegistry(mock_sonic_db)
    feature_registry.update(manifest, new_manifest)

    mock_init_cfg.set_entry.assert_has_calls(
        [
            call("AUTO_TECHSUPPORT_FEATURE", "test", None),
            call("AUTO_TECHSUPPORT_FEATURE", "test_new", {
                    "state" : "enabled",
                    "rate_limit_interval" : "600"
                })
        ],
        any_order = True
    )

    mock_other_cfg.set_entry.assert_has_calls(
        [
            call("AUTO_TECHSUPPORT_FEATURE", "test", None),
            call("AUTO_TECHSUPPORT_FEATURE", "test_new", {
                    "state" : "disabled",
                    "rate_limit_interval" : "1000"
                })
        ],
        any_order = True
    )
示例#7
0
    def get_manager() -> 'PackageManager':
        """ Creates and returns PackageManager instance.

        Returns:
            PackageManager
        """

        docker_api = DockerApi(docker.from_env())
        registry_resolver = RegistryResolver()
        return PackageManager(
            DockerApi(docker.from_env(), ProgressManager()), registry_resolver,
            PackageDatabase.from_file(),
            MetadataResolver(docker_api, registry_resolver),
            ServiceCreator(FeatureRegistry(SonicDB), SonicDB), device_info,
            filelock.FileLock(PACKAGE_MANAGER_LOCK_FILE, timeout=0))
示例#8
0
    def get_manager() -> 'PackageManager':
        """ Creates and returns PackageManager instance.

        Returns:
            PackageManager
        """

        docker_api = DockerApi(docker.from_env(), ProgressManager())
        registry_resolver = RegistryResolver()
        metadata_resolver = MetadataResolver(docker_api, registry_resolver)
        cfg_mgmt = config_mgmt.ConfigMgmt(source=INIT_CFG_JSON)
        cli_generator = CliGenerator(log)
        feature_registry = FeatureRegistry(SonicDB)
        service_creator = ServiceCreator(feature_registry, SonicDB,
                                         cli_generator, cfg_mgmt)

        return PackageManager(
            docker_api, registry_resolver, PackageDatabase.from_file(),
            metadata_resolver, service_creator, device_info,
            filelock.FileLock(PACKAGE_MANAGER_LOCK_FILE, timeout=0))
def test_auto_ts_deregister(mock_sonic_db):
    mock_connector = Mock()
    mock_sonic_db.get_connectors = Mock(return_value=[mock_connector])
    feature_registry = FeatureRegistry(mock_sonic_db)
    feature_registry.deregister("test")
    mock_connector.set_entry.assert_any_call("AUTO_TECHSUPPORT_FEATURE", "test", None)