コード例 #1
0
def test_add_plugin_config_api():
    try:
        apc = pc("/tmp")
        resp = requests.put(f"{base_url}/admin/plugin", headers={"Content-Type": "application/json", **headers}, json=[apc])
        assert resp.status_code == 200
        ps = plugin_config.get_plugin_configs({})
        assert len(ps) == 1
        ps = plugin_config.get_plugin_configs(fil)
        assert len(ps) == 1
    finally:
        plugin_config.delete_plugin_configs({})
コード例 #2
0
def test_delete_plugin_config():
    try:
        apc = pc("/tmp")
        plugin_config.add_plugin_configs([apc])
        ps = plugin_config.get_plugin_configs({})
        assert len(ps) == 1
        ps = plugin_config.get_plugin_configs(fil)
        assert len(ps) == 1
        plugin_config.delete_plugin_config(name)
        ps = plugin_config.get_plugin_configs({})
        assert len(ps) == 0
        ps = plugin_config.get_plugin_configs(fil)
        assert len(ps) == 0
    finally:
        plugin_config.delete_plugin_configs({})
コード例 #3
0
def test_delete_plugin_configs_name_regex():
    try:
        apc = pc("/tmp")
        apc2 = pc2("/tmp")
        plugin_config.add_plugin_configs([apc, apc2])
        ps = plugin_config.get_plugin_configs({})
        assert len(ps) == 2
        ps = plugin_config.get_plugin_configs(fil)
        assert len(ps) == 1
        plugin_config.delete_plugin_configs({"name": {"$regex": "nginx.*"}})
        ps = plugin_config.get_plugin_configs({})
        assert len(ps) == 0
        ps = plugin_config.get_plugin_configs(fil)
        assert len(ps) == 0
    finally:
        plugin_config.delete_plugin_configs({})
コード例 #4
0
def test_run_container_from_init_dep():
    apcs = echo_pcs_dep
    try:
        init_plugin_path = "/plugin"
        os.mkdir(init_plugin_path)
        with open(f"{init_plugin_path}/echo.yaml", "w+") as f:
            write_config(apcs, f)
        os.environ["INIT_PLUGIN_PATH"] = init_plugin_path

        plugin.init_plugin()
        assert bag_contains(plugin_config.get_plugin_configs({}), apcs)

        time.sleep(CLIENT_DELAY)
        for apc in apcs:
            container_name = apc["name"]

            resp = requests.get(f"http://{container_name}/")

        assert resp.status_code == 200
        assert resp.json()["method"] == "GET"
        shutil.rmtree(init_plugin_path)
    finally:
        for apc in apcs:
            plugin.stop_container(apc)
            plugin.remove_container(apc)
            plugin_config.delete_plugin_configs(apc)
コード例 #5
0
def test_run_container_from_init2():
    try:
        apc = echo_pc
        apc2 = echo_pc2
        apcs = [apc, apc2]
        init_plugin_path = "/plugin"
        os.mkdir(init_plugin_path)
        with open(f"{init_plugin_path}/echo.yaml", "w+") as f:
            write_config(apcs, f)
            
        os.environ["INIT_PLUGIN_PATH"] = init_plugin_path

        plugin.init_plugin()
        assert bag_contains(plugin_config.get_plugin_configs({}), apcs)

        container_name = apc["name"]
        container_name2 = apc2["name"]

        time.sleep(CLIENT_DELAY)
        resp = requests.get("http://{host}/".format(host=container_name))

        assert resp.status_code == 200
        assert resp.json()["method"] == "GET"
        resp2 = requests.get("http://{host}/".format(host=container_name2))

        assert resp2.status_code == 200
        assert resp2.json()["method"] == "GET"
        shutil.rmtree(init_plugin_path)
    finally:
        plugin.stop_container(apc)
        plugin.remove_container(apc)
        plugin_config.delete_plugin_configs(apc)
        plugin.stop_container(apc2)
        plugin.remove_container(apc2)
        plugin_config.delete_plugin_configs(apc2)
コード例 #6
0
def test_delete_container_from_init2():
    apc = echo_pc
    apc2 = echo_pc2
    apcs = [apc, apc2]
    init_plugin_path = "/plugin"
    os.mkdir(init_plugin_path)
    with open(f"{init_plugin_path}/echo.yaml", "w+") as f:
        write_config(apcs, f)
            
    os.environ["INIT_PLUGIN_PATH"] = init_plugin_path
        
    plugin.init_plugin()
        
    container_name = apc["name"]
    container_name2 = apc2["name"]

    time.sleep(CLIENT_DELAY)
    plugin.delete_init_plugin()
        
    with pytest.raises(Exception):
        resp = requests.get("http://{host}/".format(host=container_name))

    with pytest.raises(Exception):
        resp = requests.get("http://{host}/".format(host=container_name2))
        
    assert bag_equal(plugin_config.get_plugin_configs({}), [])
    shutil.rmtree(init_plugin_path)
コード例 #7
0
def test_get_plugin_containers_api():
    with tempfile.TemporaryDirectory(prefix="/tmp/") as temp_dir_name:
        os.chmod(temp_dir_name, 0o755)
        s = "pds"
        with open(os.path.join(temp_dir_name, "index.json"), "w+") as f:
            f.write(json.dumps(s))

        try:
            apc = pc(temp_dir_name)
            apc2 = pc2(temp_dir_name)
            plugin_config.add_plugin_configs([apc, apc2])
            ps = plugin_config.get_plugin_configs({})
            assert len(ps) == 2
            apc = ps[0]

            resp = requests.put(f"{base_url}/admin/container", headers=headers)
            assert (resp.status_code == 200 or resp.status_code == 204)

            resp = requests.get(f"{base_url}/admin/container", headers=headers)

            assert resp.status_code == 200
            assert bag_equal(resp.json(), [{"name": name, "container": {"status": "running"}}, {"name": name2, "container": {"status": "running"}}])
        finally:
            api.delete_containers()
            plugin_config.delete_plugin_configs({})
コード例 #8
0
def test_get_plugin_config_api():
    with tempfile.TemporaryDirectory(prefix="/tmp/") as temp_dir_name:
        os.chmod(temp_dir_name, 0o755)
        s = "pds"
        with open(os.path.join(temp_dir_name, "index.json"), "w+") as f:
            f.write(json.dumps(s))

        try:
            apc = pc(temp_dir_name)
            plugin_config.add_plugin_configs([apc])
            ps = plugin_config.get_plugin_configs({"name": name})
            assert len(ps) == 1
            apc = ps[0]
            apc["_id"] = str(apc["_id"])

            resp = requests.put(f"{base_url}/admin/plugin/{name}/container", headers=headers)
            assert (resp.status_code == 200 or resp.status_code == 204)

            resp = requests.get(f"{base_url}/admin/plugin/{name}", headers=headers)

            assert resp.status_code == 200
            assert resp.json() == apc
        finally:
            api.delete_containers()
            plugin_config.delete_plugin_configs({})
コード例 #9
0
def test_update_plugin_config():
    try:
        apc = pc("/tmp")
        apc2 = pc2("/tmp")
        plugin_config.add_plugin_configs([apc])
        ps = plugin_config.get_plugin_configs({})
        assert len(ps) == 1
        ps = plugin_config.get_plugin_configs(fil)
        assert len(ps) == 1
        plugin_config.replace_plugin_config(name, apc2)
        ps = plugin_config.get_plugin_configs({})
        assert len(ps) == 1
        ps = plugin_config.get_plugin_configs(fil)
        assert len(ps) == 0
        ps = plugin_config.get_plugin_configs(fil2)
        assert len(ps) == 1
    finally:
        plugin_config.delete_plugin_configs({})
コード例 #10
0
def test_delete_plugin_configs_api_name_regex():
    try:
        apc = pc("/tmp")
        apc2 = pc2("/tmp")
        resp = requests.put(f"{base_url}/admin/plugin", headers={"Content-Type": "application/json", **headers}, json=[apc])
        assert resp.status_code == 200
        resp = requests.put(f"{base_url}/admin/plugin", headers={"Content-Type": "application/json", **headers}, json=[apc2])
        assert resp.status_code == 200
        ps = plugin_config.get_plugin_configs({})
        assert len(ps) == 2
        ps = plugin_config.get_plugin_configs(fil)
        assert len(ps) == 1
        resp = requests.delete(f"{base_url}/admin/plugin?name_regex=nginx.*", headers=headers)
        assert resp.status_code == 200
        ps = plugin_config.get_plugin_configs({})
        assert len(ps) == 0
        ps = plugin_config.get_plugin_configs(fil)
        assert len(ps) == 0
    finally:
        plugin_config.delete_plugin_configs({})
コード例 #11
0
def get_containers():
    containers = []
    for pc in plugin_config.get_plugin_configs({}):
        container = plugin.get_container(pc)
        if container is not None:
            cs = {"status": container.status}
        else:
            cs = None

        containers.append({"name": pc["name"], "container": cs})
    return containers
コード例 #12
0
def test_get_plugin_configs_name_regex():
    with tempfile.TemporaryDirectory(prefix="/tmp/") as temp_dir_name:
        os.chmod(temp_dir_name, 0o755)
        s = "pds"
        with open(os.path.join(temp_dir_name, "index.json"), "w+") as f:
            f.write(json.dumps(s))

        try:
            apc = pc(temp_dir_name)
            apc2 = pc2(temp_dir_name)
            plugin_config.add_plugin_configs([apc, apc2])
            ps = plugin_config.get_plugin_configs({})
            assert len(ps) == 2
            for apc0 in ps:
                apc0["_id"] = str(apc0["_id"])

            ps2 = plugin_config.get_plugin_configs({"name": {"$regex": "nginx.*"}})
            for a in ps2:
                a["_id"] = str(a["_id"])

            assert bag_equal(ps2, ps)
        finally:
            plugin_config.delete_plugin_configs({})
コード例 #13
0
def test_run_plugin_container_get_echo_405():

    try:
        apc = echo_pc
        plugin_config.add_plugin_configs([apc])
        container_name = apc["name"]
        ps = plugin_config.get_plugin_configs({"name": container_name})
        assert len(ps) == 1
        apc = ps[0]
        plugin.run_container(apc)
        
        time.sleep(CLIENT_DELAY)
        resp = requests.get(f"{base_url}/plugin/{container_name}/index.json?status=405")
        
        assert resp.status_code == 405
    finally:
        api.delete_containers()
        plugin_config.delete_plugin_configs({})
コード例 #14
0
def test_run_plugin_container_post_echo_405():
    s = "pds"
    
    try:
        apc = echo_pc
        plugin_config.add_plugin_configs([apc])
        container_name = apc["name"]
        ps = plugin_config.get_plugin_configs({"name": container_name})
        assert len(ps) == 1
        apc = ps[0]
        plugin.run_container(apc)
        
        time.sleep(CLIENT_DELAY)
        resp = requests.post(f"{base_url}/plugin/{container_name}/index.json?status=405", headers={"Content-Type": "application/json"}, json=s)

        assert resp.status_code == 405

    finally:
        api.delete_containers()
        plugin_config.delete_plugin_configs({})
コード例 #15
0
def test_get_plugin_configs_api_name_regex():
    with tempfile.TemporaryDirectory(prefix="/tmp/") as temp_dir_name:
        os.chmod(temp_dir_name, 0o755)
        s = "pds"
        with open(os.path.join(temp_dir_name, "index.json"), "w+") as f:
            f.write(json.dumps(s))

        try:
            apc = pc(temp_dir_name)
            apc2 = pc2(temp_dir_name)
            plugin_config.add_plugin_configs([apc, apc2])
            ps = plugin_config.get_plugin_configs({})
            assert len(ps) == 2
            for apc0 in ps:
                apc0["_id"] = str(apc0["_id"])

            resp = requests.get(f"{base_url}/admin/plugin?name_regex=nginx.*", headers=headers)

            assert resp.status_code == 200
            assert bag_equal(resp.json(), ps)
        finally:
            plugin_config.delete_plugin_configs({})
コード例 #16
0
def test_run_plugin_container():
    with tempfile.TemporaryDirectory(prefix="/tmp/") as temp_dir_name:
        os.chmod(temp_dir_name, 0o755)
        s = "pds"
        with open(os.path.join(temp_dir_name, "index.json"), "w+") as f:
            f.write(json.dumps(s))

        try:
            apc = pc(temp_dir_name)
            plugin_config.add_plugin_configs([apc])
            ps = plugin_config.get_plugin_configs({"name": name})
            assert len(ps) == 1
            apc = ps[0]
            plugin.run_container(apc)
        
            resp = requests.get(f"{base_url}/plugin/{name}/index.json")
        
            assert resp.status_code == 200
            assert resp.json() == s
        finally:
            api.delete_containers()
            plugin_config.delete_plugin_configs({})
コード例 #17
0
def test_delete_container_from_init_dep():
    apcs = echo_pcs_dep
    init_plugin_path = "/plugin"
    os.mkdir(init_plugin_path)
    with open(f"{init_plugin_path}/echo.yaml", "w+") as f:
        write_config(apcs, f)
        
    os.environ["INIT_PLUGIN_PATH"] = init_plugin_path
        
    plugin.init_plugin()
        
    time.sleep(CLIENT_DELAY)
    plugin.delete_init_plugin()
        
    for apc in apcs:
        container_name = apc["name"]

        with pytest.raises(Exception):
            resp = requests.get(f"http://{container_name}/")

    assert bag_equal(plugin_config.get_plugin_configs({}), [])
    shutil.rmtree(init_plugin_path)
コード例 #18
0
def test_run_container_from_init_env():
    try:
        apc = echo_pc
        apcs = [apc]
        init_plugin_path = "/plugin"
        os.mkdir(init_plugin_path)
        with open(f"{init_plugin_path}/echo.yaml", "w+") as f:
            f.write('''
services:
  echo:
    image: tx-router-test-flask-echo-server:${TAG}
    environment: {}
    port: 80
    environment:
      HOST: 0.0.0.0
      PORT: "80"
    volumes: []
''')
        os.environ["INIT_PLUGIN_PATH"] = init_plugin_path
        os.environ["TAG"] = tag
        plugin.init_plugin()
        del os.environ["TAG"]
        del os.environ["INIT_PLUGIN_PATH"]
        assert bag_contains(plugin_config.get_plugin_configs({}), apcs)

        container_name = apc["name"]

        time.sleep(CLIENT_DELAY)
        resp = requests.get("http://{host}/".format(host=container_name))

        assert resp.status_code == 200
        assert resp.json()["method"] == "GET"
        shutil.rmtree(init_plugin_path)
    finally:
        plugin.stop_container(apc)
        plugin.remove_container(apc)
        plugin_config.delete_plugin_configs(apc)
コード例 #19
0
def get_plugin_configs(name=None, name_regex=None):
    ps = plugin_config.get_plugin_configs(fil(name, name_regex))
    for pc in ps:
        pc["_id"] = str(pc["_id"])

    return ps
コード例 #20
0
def add_containers():
    for pc in plugin_config.get_plugin_configs({}):
        plugin.run_container(pc)
コード例 #21
0
def delete_containers():
    for pc in plugin_config.get_plugin_configs({}):
        plugin.stop_container(pc)
        plugin.remove_container(pc)