diff options
-rw-r--r-- | app/install/test/smoke_test.py | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/app/install/test/smoke_test.py b/app/install/test/smoke_test.py new file mode 100644 index 0000000..909648b --- /dev/null +++ b/app/install/test/smoke_test.py @@ -0,0 +1,88 @@ +#!/usr/bin/env python3 +############################################################################### +# Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) # +# and others # +# # +# All rights reserved. This program and the accompanying materials # +# are made available under the terms of the Apache License, Version 2.0 # +# which accompanies this distribution, and is available at # +# http://www.apache.org/licenses/LICENSE-2.0 # +############################################################################### + +# Check that Docker images are up and running + +import argparse +from subprocess import check_output +import sys + +from utils.binary_converter import BinaryConverter + +IMAGES_TO_SEARCH = ["ui", "sensu", "scan", "api", "ldap", "listen", "mongo"] + + +class DockerImageCheck: + STATUS_HEADER = "STATUS" + PORTS_HEADER = "PORTS" + HEADERS = [ + "CONTAINER ID", + "IMAGE", + "COMMAND", + "CREATED", + "STATUS", + "PORTS", + "NAMES" + ] + + def __init__(self): + args = self.get_args() + self.docker_ps = "" + if args.inputfile: + try: + with open(args.inputfile, 'r') as input_file: + dummy_input = input_file.read() + self.docker_ps = dummy_input.splitlines() + except FileNotFoundError: + raise FileNotFoundError("failed to open input file: {}" + .format(args.inputfile)) + exit(1) + else: + cmd = "sudo docker ps" + output = check_output(cmd, shell=True) + converter = BinaryConverter() + output = converter.binary2str(output) + self.docker_ps = output.splitlines() + headers_line = self.docker_ps[0] + self.header_location = {} + for h in self.HEADERS: + self.header_location[h] = headers_line.index(h) + + @staticmethod + def get_args(): + # try to read scan plan from command line parameters + parser = argparse.ArgumentParser() + parser.add_argument('-i', '--inputfile', nargs='?', type=str, + default='', + help="read input from the specifed file \n" + + "(default: from stdin)") + return parser.parse_args() + + def verify_image_is_up(self, image_name) -> bool: + matches = [line for line in self.docker_ps if line.endswith(image_name)] + if not matches: + print("missing docker image: {}".format(image_name)) + return False + line = matches[0] + status = line[self.header_location[self.STATUS_HEADER]-1:] + status = status.split()[0] if ' ' in status else status + status = status.lower() + if status == "up": + return True + print("image {} is not up".format(image_name)) + return False + +if __name__ == '__main__': + image_checker = DockerImageCheck() + ret = True + for image in ["calipso-{}".format(i) for i in IMAGES_TO_SEARCH]: + ret = ret and image_checker.verify_image_is_up(image) + sys.exit(0 if ret else 1) |