aboutsummaryrefslogtreecommitdiff
path: root/test/test_dockerpy/common.py
blob: 975b13dc63b2bd1cf285246acde71b841b792b95 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import docker
import subprocess
import os
import sys
import time
from docker import Client
from . import constant

alpineDict = {
      "name":        "docker.io/library/alpine:latest",
		"shortName":   "alpine",
		"tarballName": "alpine.tar"}

def get_client():
   client = docker.Client(base_url="http://localhost:8080",timeout=15)
   return client

client = get_client()

def podman():
    binary = os.getenv("PODMAN_BINARY")
    if binary is None:
        binary = "bin/podman"
    return binary

def restore_image_from_cache(TestClass):
   alpineImage = os.path.join(constant.ImageCacheDir , alpineDict["tarballName"])
   if not os.path.exists(alpineImage):
      os.makedirs(constant.ImageCacheDir)
      client.pull(constant.ALPINE)
      response = client.get_image(constant.ALPINE)
      image_tar = open(alpineImage,mode="wb")
      image_tar.write(response.data)
      image_tar.close()
   else :
      TestClass.podman = subprocess.run(
      [
            podman(), "load", "-i", alpineImage
      ],
      shell=False,
      stdin=subprocess.DEVNULL,
      stdout=subprocess.DEVNULL,
      stderr=subprocess.DEVNULL,
   )

def run_top_container():
   c = client.create_container(image=constant.ALPINE,command='/bin/sleep 5',name=constant.TOP)
   client.start(container=c.get("Id"))
   return c.get("Id")

def enable_sock(TestClass):
   TestClass.podman = subprocess.Popen(
      [
            podman(), "system", "service", "tcp:localhost:8080",
            "--log-level=debug", "--time=0"
      ],
      shell=False,
      stdin=subprocess.DEVNULL,
      stdout=subprocess.DEVNULL,
      stderr=subprocess.DEVNULL,
   )
   time.sleep(2)

def terminate_connection(TestClass):
   TestClass.podman.terminate()
   stdout, stderr = TestClass.podman.communicate(timeout=0.5)
   if stdout:
      print("\nService Stdout:\n" + stdout.decode('utf-8'))
   if stderr:
      print("\nService Stderr:\n" + stderr.decode('utf-8'))

   if TestClass.podman.returncode > 0:
      sys.stderr.write("podman exited with error code {}\n".format(
            TestClass.podman.returncode))
      sys.exit(2)

def remove_all_containers():
   containers = client.containers(quiet=True)
   for c in containers:
      client.remove_container(container=c.get("Id"), force=True)

def remove_all_images():
   allImages = client.images()
   for image in allImages:
      client.remove_image(image,force=True)