def test_includes_all_containers(man): spec = kubeyaml.podspec(man) assume(len(spec['initContainers']) > 0) for s in ['containers', 'initContainers']: for c in spec[s]: arg = Spec.from_resource(man) arg.container = c['name'] assert kubeyaml.find_container(arg, man) is not None
def test_find_container(man, data): cs = kubeyaml.containers(man) assume(len(cs) > 0) spec = Spec.from_resource(man) ind = data.draw(strats.integers(min_value=0, max_value=len(cs) - 1)) spec.container = cs[ind]['name'] assert kubeyaml.find_container(spec, man) is not None
def test_update_image_apply(docs, data): originals = [man for doc in docs for man in kubeyaml.manifests(doc)] workloads = [wl for wl in originals if wl['kind'] in workload_kinds] assume(len(workloads) > 0) # Make sure we got workloads with different IDs assume(len(workloads) == len(set(map(resource_id, workloads)))) ind = data.draw(strats.integers(min_value=0, max_value=len(workloads) - 1)) workload = workloads[ind] containers = kubeyaml.containers(workload) assume(len(containers) > 0) yaml = kubeyaml.yaml() original = StringIO() for d in docs: yaml.dump(d, original) originalstr = comment_yaml(data.draw, original.getvalue()) note('Original:\n%s\n' % originalstr) indc = data.draw( strats.integers(min_value=0, max_value=len(containers) - 1)) spec = Spec.from_resource(workload) spec.container = containers[indc]['name'] spec.image = data.draw(images_with_tag) note('Spec: %r' % spec) infile, outfile = StringIO(originalstr), StringIO() kubeyaml.apply_to_yaml(lambda ds: kubeyaml.update_image(spec, ds), infile, outfile) # A rough check that the docs are in the same grouping into Lists, # since we'll look at individual manifests, ignoring whether they # are in Lists, after this. updateddocs = list(yaml.load_all(outfile.getvalue())) assert (len(docs) == len(updateddocs)) for i in range(len(docs)): assert (updateddocs[i]['kind'] == docs[i]['kind']) # check that the selected manifest->container has the updated # image; and, the rest are unchanged. updateds = [man for doc in updateddocs for man in kubeyaml.manifests(doc)] assert (len(originals) == len(updateds)) found = False for i in range(len(originals)): if kubeyaml.match_manifest(spec, updateds[i]): assert not found, "spec matched more than one manifest" c = kubeyaml.find_container(spec, updateds[i]) assert c is not None assert c['image'] == spec.image found = True else: assert manifests_equiv(originals[i], updateds[i]) assert found