class CartContainerTest(unittest.TestCase): TAG = "latest" container_name = Docker().random_container_name('cart') mongo_container_name = Docker().random_container_name('cart-db') def __init__(self, methodName='runTest'): super(CartContainerTest, self).__init__(methodName) self.ip = "" def setUp(self): Docker().start_container(container_name=self.mongo_container_name, image="mongo", host="cart-db") command = ['docker', 'run', '-d', '--name', CartContainerTest.container_name, '-h', 'cart', '--link', CartContainerTest.mongo_container_name, 'weaveworksdemos/cart:' + self.TAG] Docker().execute(command) self.ip = Docker().get_container_ip(CartContainerTest.container_name) def tearDown(self): Docker().kill_and_remove(CartContainerTest.container_name) Docker().kill_and_remove(CartContainerTest.mongo_container_name) def test_api_validated(self): limit = 60 while Api().noResponse('http://'+ self.ip +':80/carts/579f21ae98684924944651bf'): if limit == 0: self.fail("Couldn't get the API running") limit = limit - 1 sleep(1) out = Dredd().test_against_endpoint("carts", "http://cart/", links=[self.mongo_container_name, self.container_name], env=[("MONGO_ENDPOINT", "mongodb://cart-db:27017/data")]) self.assertGreater(out.find("0 failing"), -1) self.assertGreater(out.find("0 errors"), -1)
def setUp(self): print("+setUp") self.users_mock.start_container() self.payment_mock.start_container() self.shipping_mock.start_container() Docker().start_container(container_name=self.dynamodb_container_name, image="deangiberson/aws-dynamodb-local", host="orders-db") command = [ 'docker', 'run', '-d', '--name', OrdersContainerTest.container_name, '--env', 'AWS_DYNAMODB_ENDPOINT=http://' + OrdersContainerTest.dynamodb_container_name + ':8000', '--env', 'AWS_ACCESS_KEY_ID=foo', '--env', 'AWS_SECRET_ACCESS_KEY=bar', '--env', 'PORT=80', '-h', OrdersContainerTest.container_name, '--link', OrdersContainerTest.dynamodb_container_name, '--link', self.users_mock.container_name, '--link', self.payment_mock.container_name, '--link', self.shipping_mock.container_name, 'weaveworksdemos/orders-aws:' + self.COMMIT ] Docker().execute(command, dump_streams=True) os.system("docker logs -f " + OrdersContainerTest.container_name + " &") self.ip = Docker().get_container_ip(OrdersContainerTest.container_name) print("### orders container ip: " + self.ip) print("+setUp done")
def setUp(self): self.users_mock.start_container() self.payment_mock.start_container() self.shipping_mock.start_container() Docker().start_container(container_name=self.mongo_container_name, image="mongo", host="orders-db") print('Docker run target container') command = ['docker', 'run', '-d', '--name', OrdersContainerTest.container_name, '-h', OrdersContainerTest.container_name, '--link', OrdersContainerTest.mongo_container_name, '--link', self.users_mock.container_name, '--link', self.payment_mock.container_name, '--link', self.shipping_mock.container_name, 'weaveworksdemos/orders:' + self.COMMIT] Docker().execute(command, dump_streams=True) print('Get IP address') limit = 30 while self.ip == "": self.ip = Docker().get_container_ip(OrdersContainerTest.container_name) sleep(1) print('Waiting for get IP address') limit = limit - 1 if limit == 0: self.fail("Coundn't get the IP Address") print('IP Address is %s' % self.ip)
def test_against_endpoint(self, service, api_endpoint, links=[], env=[]): self.container_name = Docker().random_container_name('openapi') command = [ 'docker', 'run', '-h', 'openapi', '--name', self.container_name, '-v', "{0}:{1}".format(os.getcwd() + "/../openapi/specs", "/tmp/specs/") ] if links != []: [command.extend(["--link", x]) for x in links] if env != []: [ command.extend(["--env", "{}={}".format(x[0], x[1])]) for x in env ] command.extend([ Dredd.image, "/tmp/specs/{0}/{0}.json".format(service), api_endpoint, "-f", "/tmp/specs/{0}/hooks.js".format(service) ]) out = Docker().execute(command) Docker().kill_and_remove(self.container_name) return out
def tearDown(self): command = ['docker', 'logs', OrdersContainerTest.container_name] Docker().execute(command) Docker().kill_and_remove(OrdersContainerTest.container_name) Docker().kill_and_remove(OrdersContainerTest.mongo_container_name) self.users_mock.cleanup() self.payment_mock.cleanup() self.shipping_mock.cleanup()
class OrdersContainerTest(unittest.TestCase): TAG = "latest" COMMIT = "" container_name = Docker().random_container_name('orders') mongo_container_name = Docker().random_container_name('orders-db') def __init__(self, methodName='runTest'): super(OrdersContainerTest, self).__init__(methodName) self.users_mock = ServiceMock("users-orders-mock", "users-orders-mock") self.payment_mock = ServiceMock("payment", "payment") self.shipping_mock = ServiceMock("shipping", "shipping") self.ip = "" def setUp(self): self.users_mock.start_container() self.payment_mock.start_container() self.shipping_mock.start_container() Docker().start_container(container_name=self.mongo_container_name, image="mongo", host="orders-db") command = [ 'docker', 'run', '-d', '--name', OrdersContainerTest.container_name, '-h', OrdersContainerTest.container_name, '--link', OrdersContainerTest.mongo_container_name, '--link', self.users_mock.container_name, '--link', self.payment_mock.container_name, '--link', self.shipping_mock.container_name, 'weaveworksdemos/orders:' + self.COMMIT ] Docker().execute(command, dump_streams=True) self.ip = Docker().get_container_ip(OrdersContainerTest.container_name) def tearDown(self): Docker().kill_and_remove(OrdersContainerTest.container_name) Docker().kill_and_remove(OrdersContainerTest.mongo_container_name) self.users_mock.cleanup() self.payment_mock.cleanup() self.shipping_mock.cleanup() def test_api_validated(self): limit = 30 while Api().noResponse('http://' + self.ip + ':80/orders'): if limit == 0: self.fail("Couldn't get the API running") limit = limit - 1 sleep(1) out = Dredd().test_against_endpoint( "orders", 'http://' + self.ip + ':80/', links=[self.mongo_container_name, self.container_name], env=[("MONGO_ENDPOINT", "mongodb://orders-db:27017/data")], dump_streams=True) self.assertGreater(out.find("0 failing"), -1) self.assertGreater(out.find("0 errors"), -1) print(out)
def setUp(self): command = [ 'docker', 'run', '-d', '--name', PaymentContainerTest.container_name, '-h', 'payment', 'mushop/payment:' + self.TAG ] Docker().execute(command) self.ip = Docker().get_container_ip( PaymentContainerTest.container_name)
def setUp(self): command = [ 'docker', 'run', '-d', '--name', PaymentContainerTest.container_name, '-h', 'payment', 'weaveworksdemos/payment-dev:' + self.TAG ] Docker().execute(command) self.ip = Docker().get_container_ip( PaymentContainerTest.container_name)
def setUp(self): command = [ 'docker', 'run', '-d', '--name', CatalogueContainerTest.container_name, '-h', CatalogueContainerTest.container_name, 'weaveworksdemos/catalogue:' + self.TAG ] Docker().execute(command) self.ip = Docker().get_container_ip( CatalogueContainerTest.container_name)
class CatalogueApplicationTest(unittest.TestCase): TAG = "latest" container_name = 'catalogue' def __init__(self, methodName='runTest'): super(CatalogueApplicationTest, self).__init__(methodName) self.ip = "" self.front_end_ip = "" self.docker = Docker() def setUp(self): command = [ 'docker', 'run', '-d', '--name', CatalogueApplicationTest.container_name, '-h', CatalogueApplicationTest.container_name, 'weaveworksdemos/catalogue:' + self.TAG ] self.docker.execute(command) self.ip = self.docker.get_container_ip( CatalogueApplicationTest.container_name) command = [ 'docker', 'run', '-d', '--link', 'catalogue', '--name', "front-end", '-h', "front-end", 'weaveworksdemos/front-end:' + self.TAG ] self.docker.execute(command) self.front_end_ip = self.docker.get_container_ip("front-end") while Api().noResponse('http://' + self.front_end_ip + ':8079'): sleep(1) def tearDown(self): self.docker.kill_and_remove("front-end") self.docker.kill_and_remove(CatalogueApplicationTest.container_name) def test_catalogue_has_image(self): r = requests.get('http://' + self.front_end_ip + ':8079/catalogue', timeout=5) data = r.json() for item in data: for imageUrl in item['imageUrl']: r = requests.get('http://' + self.front_end_ip + ':8079' + imageUrl, timeout=5) self.assertLess(r.status_code, 299, msg=str(r.status_code) + ": error getting " + imageUrl) self.assertGreater(int(r.headers.get("Content-Length")), 0, msg="Issue with: " + imageUrl + ": " + r.headers.get("Content-Length")) self.assertEqual("image/jpeg", r.headers.get("Content-Type"), msg="Issue with: " + imageUrl + ": " + r.headers.get("Content-Type"))
def setUp(self): Docker().start_container(container_name=self.mongo_container_name, image="mongo", host="carts-db") command = ['docker', 'run', '-d', '--name', CartContainerTest.container_name, '-h', 'carts', '--link', CartContainerTest.mongo_container_name, 'weaveworksdemos/carts:' + self.COMMIT] Docker().execute(command) self.ip = Docker().get_container_ip(CartContainerTest.container_name)
def setUp(self): Docker().start_container(container_name=self.mongo_container_name, image="mongo", host="accounts-db") command = [ 'docker', 'run', '-d', '--name', AccountsContainerTest.container_name, '-h', 'accounts', '--link', self.mongo_container_name, 'weaveworksdemos/accounts:' + self.TAG ] Docker().execute(command) self.ip = Docker().get_container_ip( AccountsContainerTest.container_name)
def test_against_endpoint(self, json_spec, endpoint_container_name, api_endpoint, mongo_endpoint_url, mongo_container_name): self.container_name = Docker().random_container_name('openapi') command = [ 'docker', 'run', '-h', 'openapi', '--name', self.container_name, '--link', mongo_container_name, '--link', endpoint_container_name, '--env', "MONGO_ENDPOINT={0}".format(mongo_endpoint_url), Dredd.image, "/usr/src/app/{0}".format(json_spec), api_endpoint, "-f", "/usr/src/app/hooks.js" ] out = Docker().execute(command) Docker().kill_and_remove(self.container_name) return out
def test_maven(self): script_dir = os.path.dirname(os.path.realpath(__file__)) code_dir = script_dir + "/.." home = expanduser("~") command = ['docker', 'run', '--rm', '-v', home + '/.m2:/root/.m2', '-v', code_dir + ':/usr/src/mymaven', '-w', '/usr/src/mymaven', 'maven:3.6-jdk-11', 'mvn', '-q', 'test'] print(Docker().execute(command))
def test_go(self): script_dir = os.path.dirname(os.path.realpath(__file__)) code_dir = script_dir + "/.." home = expanduser("~") goPath = os.environ['GOPATH'] command = ['docker', 'run', '--rm', '-v', goPath + ':/go/src/', '-v', code_dir + ':/go/src/github.com/sls-microservices-demo/catalogue', '-w', '/go/src/github.com/sls-microservices-demo/catalogue', '-e', 'GOPATH=/go/', 'golang:1.7', 'go', 'test', '-v', '-covermode=count', '-coverprofile=coverage.out'] print(Docker().execute(command))
class WishlistContainerTest(unittest.TestCase): TAG = "latest" COMMIT = "" container_name = Docker().random_container_name('wishlists') mongo_container_name = Docker().random_container_name('wishlists-db') def __init__(self, methodName='runTest'): super(WishlistContainerTest, self).__init__(methodName) self.ip = "" def setUp(self): Docker().start_container(container_name=self.mongo_container_name, image="mongo", host="wishlists-db") command = [ 'docker', 'run', '-d', '--name', WishlistContainerTest.container_name, '-h', 'wishlists', '--link', WishlistContainerTest.mongo_container_name, 'weaveworksdemos/wishlists:' + self.COMMIT ] Docker().execute(command) self.ip = Docker().get_container_ip( WishlistContainerTest.container_name) def tearDown(self): Docker().kill_and_remove(WishlistContainerTest.container_name) Docker().kill_and_remove(WishlistContainerTest.mongo_container_name) def test_api_validated(self): limit = 30 while Api().noResponse('http://' + self.ip + ':80/wishlists/'): if limit == 0: self.fail("Couldn't get the API running") limit = limit - 1 sleep(1) out = Dredd().test_against_endpoint( "wishlists", "http://wishlists/", links=[self.mongo_container_name, self.container_name], env=[("MONGO_ENDPOINT", "mongodb://wishlists-db:27017/data")], dump_streams=True) self.assertGreater(out.find("0 failing"), -1) self.assertGreater(out.find("0 errors"), -1) print(out)
def start_container(self): command = [ 'docker', 'run', '-d', '--name', self.container_name, '-h', self.container_name, '-v', "{0}:{1}".format(os.getcwd(), "/data/"), '-e', 'FLASK_APP=/data/test/json-server/server.py', 'weaveworksdemos/json-server', '--port', '80' ] Docker().execute(command) sleep(2)
def setUp(self): Docker().start_container(container_name=self.mysql_container_name, image="mysql", host=self.mysql_container_name, env=[("MYSQL_ROOT_PASSWORD", "abc123"), ("MYSQL_DATABASE", "catalogue")]) # todo: a better way to ensure mysql is up sleep(15) command = [ 'docker', 'run', '-d', '--name', CatalogueContainerTest.container_name, '--link', "{}:mysql".format(self.mysql_container_name), '-h', CatalogueContainerTest.container_name, 'weaveworksdemos/catalogue:' + self.TAG ] Docker().execute(command) self.ip = Docker().get_container_ip( CatalogueContainerTest.container_name)
def test_go(self): script_dir = os.path.dirname(os.path.realpath(__file__)) code_dir = script_dir + "/.." goPath = os.environ['GOPATH'] command = [ 'docker', 'run', '--rm', '-v', goPath + ':/go/bin/', '-v', code_dir + ':/usr/src/', '-w', '/usr/src/', '-e', 'GOPATH=/go/bin', 'golang:1.6', 'go', 'test', '-v' ] print(Docker().execute(command))
def setUp(self): Docker().start_container(container_name=self.mysql_container_name, image="sls-microservices/catalogue-db:" + self.TAG, host=self.mysql_container_name, env=[("MYSQL_ROOT_PASSWORD", ""), ("MYSQL_ALLOW_EMPTY_PASSWORD", True), ("MYSQL_DATABASE", "socksdb")]) # todo: a better way to ensure mysql is up sleep(30) command = [ 'docker', 'run', '-d', '--name', CatalogueContainerTest.container_name, '--link', "{}:catalogue-db".format(self.mysql_container_name), '-h', CatalogueContainerTest.container_name, 'sls-microservices/catalogue:' + self.TAG ] Docker().execute(command) self.ip = Docker().get_container_ip( CatalogueContainerTest.container_name)
def setUp(self): self.users_mock.start_container() self.payment_mock.start_container() self.shipping_mock.start_container() Docker().start_container(container_name=self.mongo_container_name, image="mongo", host="orders-db") command = [ 'docker', 'run', '-d', '--name', OrdersContainerTest.container_name, '-h', OrdersContainerTest.container_name, '--link', OrdersContainerTest.mongo_container_name, '--link', self.users_mock.container_name, '--link', self.payment_mock.container_name, '--link', self.shipping_mock.container_name, 'weaveworksdemos/orders:' + self.COMMIT ] Docker().execute(command, dump_streams=True) self.ip = Docker().get_container_ip(OrdersContainerTest.container_name)
def test_maven(self): script_dir = os.path.dirname(os.path.realpath(__file__)) code_dir = script_dir + "/.." home = expanduser("~") hosthome = format(os.getenv('HOST_HOME')) hostcode_dir = format(os.getenv('HOST_CODE_DIR')) command = [ 'docker', 'run', '--rm', '-v', hosthome + '/.m2:/root/.m2', '-v', hostcode_dir + ':/usr/src/mymaven', '-w', '/usr/src/mymaven', 'maven:3.2-jdk-8', 'mvn', '-q', 'test' ] print(Docker().execute(command))
def test_go(self): script_dir = os.path.dirname(os.path.realpath(__file__)) code_dir = script_dir + "/.." goPath = os.environ['GOPATH'] command = [ 'docker', 'run', '--rm', '-v', goPath + ':/go/', '-v', code_dir + ':/go/src/github.com/gosample/microdemo/payment', '-w', '/go/src/github.com/gosample/microdemo/payment', '-e', 'GOPATH=/go/', 'golang:1.7', 'go', 'test', '-v', '-covermode=count', '-coverprofile=coverage.out' ] print(Docker().execute(command, dump_streams=True))
def test(self): script_dir = os.path.dirname(os.path.realpath(__file__)) code_dir = script_dir + "/../../sockshop/" + self.container_dir test_container_name = self.container_dir + '-test' docker = Docker() docker.execute(['docker', 'build', '-t', test_container_name, code_dir]) docker.execute(['docker', 'run', '--rm', test_container_name, 'go', 'test', 'github.com/microservices-demo/microservices-demo/' + self.container_dir])
def test_maven(self): script_dir = os.path.dirname(os.path.realpath(__file__)) code_dir = script_dir + "/.." home = expanduser("~") command = [ 'docker', 'run', '--rm', '-v', home + '/.m2:/root/.m2', '-v', code_dir + ':/usr/src/mymaven', '-w', '/usr/src/mymaven', 'maven:3.2-jdk-8', 'mvn', '-DrepoToken=' + os.getenv('COVERALLS_TOKEN'), '-DserviceJobId=' + os.getenv('TRAVIS_JOB_ID'), '-Dbranch=' + os.getenv('TRAVIS_BRANCH'), '-DpullRequest=' + os.getenv('TRAVIS_PULL_REQUEST'), '-DserviceName=' + os.getenv('TRAVIS'), 'verify', 'jacoco:report', 'coveralls:report' ] print(Docker().execute(command))
class PaymentContainerTest(unittest.TestCase): TAG = "latest" PORT = "8080" container_name = Docker().random_container_name('payment') def __init__(self, methodName='runTest'): super(PaymentContainerTest, self).__init__(methodName) self.ip = "" def setUp(self): command = [ 'docker', 'run', '-d', '--name', PaymentContainerTest.container_name, '-h', 'payment', 'weaveworksdemos/payment-dev:' + self.TAG, '/app', '-port=' + PaymentContainerTest.PORT ] Docker().execute(command) self.ip = Docker().get_container_ip( PaymentContainerTest.container_name) def tearDown(self): Docker().kill_and_remove(PaymentContainerTest.container_name) def test_api_validated(self): limit = 30 url = f'http://{self.ip}:{PaymentContainerTest.PORT}/' while Api().noResponse(url + 'payments/'): if limit == 0: self.fail("Couldn't get the API running") limit = limit - 1 sleep(1) out = Dredd().test_against_endpoint("payment", url, links=[self.container_name], dump_streams=True) self.assertGreater(out.find("0 failing"), -1) self.assertGreater(out.find("0 errors"), -1)
def test_maven(self): script_dir = os.path.dirname(os.path.realpath(__file__)) code_dir = script_dir + "/.." home = expanduser("~") hosthome = format(os.getenv('HOST_HOME')) hostcode_dir = format(os.getenv('HOST_CODE_DIR')) command = ['docker', 'run', '--rm', '-v', hosthome + '/.m2:/root/.m2', '-v', hosthome + '/.m2/.sonar:/root/.sonar', '-v', hostcode_dir + ':/usr/src/mymaven', '-w', '/usr/src/mymaven', 'maven:3.2-jdk-8', 'mvn', '-Dsonar.login='******'SONAR_TOKEN'), '-Dsonar.host.url=' + os.getenv('SONAR_HOST'), '-Dsonar.java.binaries=target/classes', '-Dsonar.sources=src/main/java', 'verify', 'jacoco:report', 'sonar:sonar'] print(Docker().execute(command))
class PaymentContainerTest(unittest.TestCase): TAG = "latest" container_name = Docker().random_container_name('payment') def __init__(self, methodName='runTest'): super(PaymentContainerTest, self).__init__(methodName) self.ip = "" def setUp(self): command = [ 'docker', 'run', '-d', '--name', PaymentContainerTest.container_name, '-h', 'payment', 'mushop/payment:' + self.TAG ] Docker().execute(command) self.ip = Docker().get_container_ip( PaymentContainerTest.container_name) def tearDown(self): Docker().kill_and_remove(PaymentContainerTest.container_name) def test_api_validated(self): limit = 30 while Api().noResponse('http://' + self.ip + ':80/payments/'): if limit == 0: self.fail("Couldn't get the API running") limit = limit - 1 sleep(1) out = Dredd().test_against_endpoint("payment", 'http://' + self.ip + ':80/', links=[self.container_name], dump_streams=True) self.assertGreater(out.find("0 failing"), -1) self.assertGreater(out.find("0 errors"), -1)
def tearDown(self): Docker().kill_and_remove(CartContainerTest.container_name) Docker().kill_and_remove(CartContainerTest.mongo_container_name)
def tearDown(self): Docker().kill_and_remove(CatalogueContainerTest.container_name) Docker().kill_and_remove(CatalogueContainerTest.mysql_container_name)