Skip to content
Snippets Groups Projects
Commit 4af1db83 authored by Erik Reid's avatar Erik Reid
Browse files

added an end-to-end cli flash test, bugfixes

parent 8efb4b1b
No related branches found
No related tags found
No related merge requests found
import json import json
import logging import logging
import os import os
from typing import Union
import click import click
import jsonschema import jsonschema
...@@ -131,10 +132,13 @@ class State(object): ...@@ -131,10 +132,13 @@ class State(object):
return state['last'] if state else -1 return state['last'] if state else -1
@last.setter @last.setter
def last(self, new_last: float): def last(self, new_last: Union[float, None]):
state = {'last': new_last} if not new_last or new_last < 0:
with open(self.filenames['state'], 'w') as f: os.unlink(self.filenames['state'])
f.write(json.dumps(state)) else:
state = {'last': new_last}
with open(self.filenames['state'], 'w') as f:
f.write(json.dumps(state))
@property @property
def interfaces(self) -> list: def interfaces(self) -> list:
...@@ -178,8 +182,6 @@ def _validate_config(ctx, param, value): ...@@ -178,8 +182,6 @@ def _validate_config(ctx, param, value):
return config return config
@click.command() @click.command()
@click.option( @click.option(
'--config', '--config',
...@@ -195,7 +197,7 @@ def main(config, force): ...@@ -195,7 +197,7 @@ def main(config, force):
state = State(config['statedir']) state = State(config['statedir'])
last = inventory.last_update_timestamp(config['inventory']) last = inventory.last_update_timestamp(config['inventory'])
if force or last != state.last: if force or not last or last != state.last:
state.last = last state.last = last
state.interfaces = inventory.load_interfaces(config['inventory']) state.interfaces = inventory.load_interfaces(config['inventory'])
......
import json import json
import os import os
import random
import re import re
import tempfile import tempfile
...@@ -87,7 +88,7 @@ def mocked_sensu(): ...@@ -87,7 +88,7 @@ def mocked_sensu():
responses.add( responses.add(
method=responses.GET, method=responses.GET,
url=re.compile(r'.*sensu.+/api/core/v2/namespaces/[^\/]+/checks$'), url=re.compile(r'.*sensu.+/api/core/v2/namespaces/[^\/]+/checks$'),
body=json.dumps(list(saved_sensu_checks.items())) json=list(saved_sensu_checks.values())
) )
def new_check_callback(request): def new_check_callback(request):
...@@ -138,6 +139,7 @@ def mocked_sensu(): ...@@ -138,6 +139,7 @@ def mocked_sensu():
yield saved_sensu_checks yield saved_sensu_checks
@pytest.fixture @pytest.fixture
def mocked_inventory(): def mocked_inventory():
...@@ -147,3 +149,9 @@ def mocked_inventory(): ...@@ -147,3 +149,9 @@ def mocked_inventory():
url=re.compile(r'.*inventory.+/poller/interfaces.*'), url=re.compile(r'.*inventory.+/poller/interfaces.*'),
body=_load_test_data('interfaces.json')) body=_load_test_data('interfaces.json'))
bogus_version = {'latch': {'timestamp': 10000 * random.random()}}
# mocked api for returning all checks
responses.add(
method=responses.GET,
url=re.compile(r'.*inventory.+/version.*'),
body=json.dumps(bogus_version))
import json
import tempfile
from click.testing import CliRunner
import responses
from brian_polling_manager import cli
@responses.activate
def test_run_flashtest(config, mocked_sensu, mocked_inventory):
with tempfile.NamedTemporaryFile(mode='w') as f:
f.write(json.dumps(config))
f.flush()
runner = CliRunner()
result = runner.invoke(
cli.main,
['--config', f.name, '--force']
)
assert result.exit_code == 0
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment