示例#1
0
def test_list_packages():
    r = ApprClient()
    with requests_mock.mock() as m:
        response = '{"packages": "true"}'
        m.get(DEFAULT_REGISTRY + DEFAULT_PREFIX + "/api/v1/packages",
              text=response)
        assert json.dumps(r.list_packages({})) == response
示例#2
0
def test_pull_discovery_https(discovery_html):
    r = ApprClient()
    with requests_mock.mock() as m:
        response = b'package_data'
        m.get("https://appr.sh/?appr-discovery=1", text=discovery_html, complete_qs=True)
        m.get("https://api.kubespray.io/api/v1/packages/orga/p1/pull", content=response)
        assert r.pull("appr.sh/orga/p1", {"key": "version", "value": "1.0.0"}, "helm") == response
示例#3
0
def test_pull_channel(channels_data):
    r = ApprClient()
    with requests_mock.mock() as m:
        response = b'package_data'
        m.get(DEFAULT_REGISTRY + DEFAULT_PREFIX + "/api/v1/packages/orga/p1/1.0.0-rc/helm/pull", content=response)
        m.get(DEFAULT_REGISTRY + DEFAULT_PREFIX + "/api/v1/packages/orga/p1/channels/dev",
              text=json.dumps(channels_data['dev']))
        assert r.pull("orga/p1", {"value": "dev", "key": "channel"}, "helm") == response
示例#4
0
def test_get_version():
    r = ApprClient()
    response = '{"appr-server": "0.23.0"}'
    with requests_mock.mock() as m:
        m.get(DEFAULT_REGISTRY + DEFAULT_PREFIX + "/version",
              complete_qs=True,
              text=response)
        assert json.dumps(r.version()) == json.dumps(json.loads(response))
示例#5
0
def test_push_force():
    body = {"blob": b64encode(b"foobar").decode('utf-8')}
    r = ApprClient()
    response = '{"packages": "true"}'
    with requests_mock.mock() as m:
        m.post(DEFAULT_REGISTRY + DEFAULT_PREFIX + "/api/v1/packages/ant31/kube-ui?force=true",
               complete_qs=True,
               text=response)
        assert json.dumps(r.push(name="ant31/kube-ui", body=body, force=True)) == json.dumps(json.loads(response))
示例#6
0
def test_list_packages_orga():
    r = ApprClient()
    with requests_mock.mock() as m:
        response = '{"packages": "true"}'
        m.get(DEFAULT_REGISTRY + DEFAULT_PREFIX +
              "/api/v1/packages?namespace=ant31",
              complete_qs=True,
              text=response)
        assert json.dumps(r.list_packages({'namespace': "ant31"})) == response
示例#7
0
def test_delete_package_unauthorized():
    r = ApprClient()
    with requests_mock.mock() as m:
        response = '{"packages": "true"}'
        m.delete(DEFAULT_REGISTRY + DEFAULT_PREFIX + "/api/v1/packages/ant31/kube-ui/1.4.3/helm",
                 complete_qs=True,
                 text=response,
                 status_code=401)
        with pytest.raises(requests.HTTPError):
            r.delete_package("ant31/kube-ui", "1.4.3", "helm")
示例#8
0
def test_push_unauthorized():
    r = ApprClient()
    with requests_mock.mock() as m:
        body = {"blob": "fdsfds"}
        response = b'{"packages": "true"}'
        m.post(DEFAULT_REGISTRY + DEFAULT_PREFIX + "/api/v1/packages/ant31/kube-ui?force=false",
               complete_qs=True,
               content=response,
               status_code=401)
        with pytest.raises(requests.HTTPError):
            r.push(name="ant31/kube-ui", body=body)
示例#9
0
def test_pull_digest():
    r = ApprClient()
    with requests_mock.mock() as m:
        response = b'package_data'
        m.get(DEFAULT_REGISTRY + DEFAULT_PREFIX +
              "/api/v1/packages/orga/p1/blobs/sha256/2432",
              content=response)
        assert r.pull("orga/p1", {
            "key": "digest",
            "value": "2432"
        }, "helm") == response
示例#10
0
def test_pull():
    r = ApprClient()
    with requests_mock.mock() as m:
        response = b'package_data'
        m.get(DEFAULT_REGISTRY + DEFAULT_PREFIX +
              "/api/v1/packages/orga/p1/1.0.0/helm/pull",
              content=response)
        assert r.pull("orga/p1", {
            "value": "1.0.0",
            "key": "version"
        }, "helm") == response
示例#11
0
def test_delete_package():
    r = ApprClient()
    with requests_mock.mock() as m:
        response = '{"packages": "true"}'
        m.delete(DEFAULT_REGISTRY + DEFAULT_PREFIX +
                 "/api/v1/packages/ant31/kube-ui/1.4.3/helm",
                 complete_qs=True,
                 text=response)
        assert r.delete_package("ant31/kube-ui", "1.4.3", "helm") == {
            "packages": "true"
        }
示例#12
0
def test_headers_with_auth():
    r = ApprClient()
    r.auth.add_token('*', 'titi')
    assert sorted(r.headers.keys()) == ["Authorization", 'Content-Type', 'User-Agent']
    assert r.headers["Authorization"] == "titi"
    assert r.headers["Content-Type"] == "application/json"
    assert r.headers["User-Agent"] == "apprpy-cli/%s" % appr.__version__
示例#13
0
    def download_appr_deps(self,
                           deps,
                           dest=DEFAULT_CHARTS,
                           tarball=False,
                           requests_verify=True):
        """
            Creates a directory 'dep_charts' to download and extract all dependencies
            fetched from the app-registry server.
            returns a helm dependency list
        """
        mkdir_p(dest)
        helm_deps = []
        for dep in deps:
            package_parts = parse_package_name(dep['name'])
            name = package_parts['package']

            vparts = parse_version_req(dep['version'])
            client = ApprClient(package_parts['host'],
                                requests_verify=requests_verify)
            package_name = '%s/%s' % (package_parts['namespace'], name)

            pullpack = client.pull_json(package_name,
                                        version_parts=vparts,
                                        media_type='helm')
            package = ApprPackage(pullpack['blob'], b64_encoded=True)
            release = pullpack['release']
            packagepath = os.path.join(dest, package_parts['namespace'])
            print('Pulled package: %s (%s) \n -> %s' %
                  (dep['name'], release, packagepath),
                  file=sys.stderr)
            if tarball:
                with open('%s-%s.tgz' % (name, release), 'wb') as tarfile:
                    tarfile.write(package.blob)
            package.extract(packagepath)
            dep.update({
                'name':
                name,
                'version':
                release,
                'repository':
                'file://%s' %
                os.path.join(packagepath, package_parts['package'])
            })
            helm_deps.append(dep)
        return helm_deps
示例#14
0
def test_url_prefix():
    r = ApprClient(endpoint="http://test.com/test")
    assert r._url("/2") == "http://test.com/test" + DEFAULT_PREFIX + "/2"
示例#15
0
def test_default_endpoint():
    r = ApprClient(endpoint=None)
    assert r.endpoint.geturl() == DEFAULT_REGISTRY + DEFAULT_PREFIX
示例#16
0
def test_headers_without_auth():
    r = ApprClient()
    assert sorted(r.headers.keys()) == ['Content-Type', 'User-Agent']
    assert r.headers["Content-Type"] == "application/json"
    assert r.headers["User-Agent"] == "apprpy-cli/%s" % appr.__version__