def test__run__syntax_error__fail(controller, goss_sut_service): sut = goss_sut_service g = GossTool(controller, sut) g._command = '/goss/goss-linux-amd64 /data' with pytest.raises(TestToolError, match='Syntax error'): g.run(target)
def test__run__goss_not_found__fail(controller, goss_sut_service): sut = goss_sut_service g = GossTool(controller, sut) g._command = 'not_existing' with pytest.raises(TestToolError, match='goss executable was not found'): g.run(target)
def test__run__gossfile_not_found__fail(controller, goss_sut_service): sut = goss_sut_service g = GossTool(controller, sut) g.gossfile = 'bla' with pytest.raises(TestToolError, match='Gossfile not found'): g.run(target)
def test__run__pass(controller, gossfile, goss_sut_service): sut = goss_sut_service controller.put_file(sut.target, gossfile) g = GossTool(controller, sut, gossfile=os.path.basename(gossfile)) res = g.run(target) assert res['summary']['failed-count'] == 1
def _create_sidecar(self, command=None): """ Helper method to create a sidecar service. Args: command: the command that the sidecar service should run Returns: None """ if not command: command = GossTool(controller=self.instance.orchestrator.controller).command network_name = self.instance.sut.service_id if 'network' in self.instance.sut.target_type else None if network_name: assert self.instance.orchestrator.controller.get_network( network_name), '_create_sidecar: cannot find network {}'.format(network_name) volumes = { self.instance.test_volume: { 'bind': '/goss', 'mode': 'ro' } } self.instance.sidecar = self.instance.orchestrator.controller.get_or_create_sidecar( name='robot_sidecar_for_{}'.format(self.instance.deployment_name), command=command, network=network_name, volumes=volumes) self.instance.update_sut(target_type='container', target=self.instance.sidecar.name) if network_name: assert network_name in self.instance.sidecar.attrs['NetworkSettings']['Networks'].keys()
def test__run__in_sidecar__pass(sidecar, gossfile_sidecar, network, volume_with_goss): controller = sidecar.get('controller') sidecar_name = sidecar.get('name') volumes = {volume_with_goss: {'bind': '/goss', 'mode': 'ro'}} g = GossTool(controller, None, gossfile=os.path.basename(gossfile_sidecar)) sidecar = controller.get_or_create_sidecar(image=sidecar.get('image'), command=g._command, network=network.name, volumes=volumes, name=sidecar_name) assert isinstance(sidecar, Container) controller.put_file(sidecar, gossfile_sidecar) res = controller.run_sidecar(sidecar=sidecar) j = json.loads(res) assert j['summary']['failed-count'] == 0
def test__run__in_sidecar_with_deployment__pass(sidecar, network, volume_with_goss, stack, service_id): controller = sidecar.get('controller') sidecar_name = sidecar.get('name') gossfile = \ """addr: tcp://{}:80: reachable: true """.format(service_id) volumes = {volume_with_goss: {'bind': '/goss', 'mode': 'ro'}} controller.connect_network_to_service(service_id, network.name) g = GossTool(controller, None) sidecar = controller.get_or_create_sidecar(image=sidecar.get('image'), command=g._command, network=network.name, volumes=volumes, name=sidecar_name) assert isinstance(sidecar, Container) with tempfile.NamedTemporaryFile() as f: f.write(gossfile) f.seek(0) controller.put_file(entity=sidecar, file_to_transfer=f.name, filename='goss.yaml') sleep(10) res = controller.run_sidecar(sidecar=sidecar) assert len(res) > 0 j = json.loads(res) assert j['summary']['failed-count'] == 0
def goss_tool_instance(): return GossTool()