Ejemplo n.º 1
0
def test_credentials_popen_raise_rewrapped(fake_user_home, popen_except,
                                           match):
    """Tests DockerCredentials.get_login wraps common Popen errors correctly"""
    with MockPopen.mock(target='drclip.creds.Popen',
                        raise_on_call=popen_except):
        with pytest.raises(CredentialsException, match=match):
            DockerCredentials().get_login('test')
Ejemplo n.º 2
0
def test_get_credentials(fake_user_home):
    """Tests DockerCredentials.get_login under expected environment with registry"""
    with MockPopen.mock(target='drclip.creds.Popen') as mock:
        mock.add_cmd(['docker-credential-secretservice', 'get'],
                     stdin=REGISTRY.encode(),
                     stdout=GOOD_CMD_GET,
                     rc=0)
        assert DockerCredentials().get_login(REGISTRY) == ('user', 'pass')
Ejemplo n.º 3
0
def test_credentials_not_found(fake_user_home):
    """Tests DockerCredentials.get_login raises properly when unknown registry supplied"""
    with MockPopen.mock(target='drclip.creds.Popen') as mock:
        mock.add_cmd(['docker-credential-secretservice', 'get'],
                     stdin=b'test',
                     stdout=b'credentials not found',
                     rc=1)
        with pytest.raises(CredentialsNotFound, match='Credentials not found'):
            DockerCredentials().get_login('test')
Ejemplo n.º 4
0
def test_credentials_unknown_error(fake_user_home):
    """Tests DockerCredentials.get_login raises properly when the secret command returns 1 with a strange message"""
    with MockPopen.mock(target='drclip.creds.Popen') as mock:
        mock.add_cmd(['docker-credential-secretservice', 'get'],
                     stdin=b'test',
                     stdout=b'strange error',
                     rc=1)
        with pytest.raises(
                CredentialsException,
                match=r'Unknown error when calling .+ strange error'):
            DockerCredentials().get_login('test')
Ejemplo n.º 5
0
def test_get_credentials_when_passed_file(fake_user_home):
    """Tests DockerCredentials.get_login under expected environment with registry"""
    with MockPopen.mock(target='drclip.creds.Popen') as mock:
        mock.add_cmd(['docker-credential-secretservice', 'get'],
                     stdin=REGISTRY.encode(),
                     stdout=GOOD_CMD_GET,
                     rc=0)
        with open(f'{fake_user_home}/someotherconfig.json', 'w+') as fh:
            fh.write(GOOD_DOCKER_CONFIG)
            fh.seek(0)
            assert DockerCredentials(config=fh).get_login(REGISTRY) == ('user',
                                                                        'pass')
Ejemplo n.º 6
0
    def __init__(self, registry: str, credentials: DockerCredentials = None):
        """
        Implements interface into V2 docker registry

        :param registry: the registry url to which this object will communicate
        :param credentials: provides credentials to use for authentication to registry
        """
        self._scheme = 'https'
        self._prefix = 'v2'
        self._registry = registry
        self._credentials = credentials if credentials else DockerCredentials()
        self._session = requests.Session()
Ejemplo n.º 7
0
def drclip(ctx: click.core.Context, config: TextIOWrapper, registry: str):
    """Runs commands against docker registries"""
    ctx.obj = CmdContext(RegistryV2API(registry, DockerCredentials(config)))
    err = None
    try:
        ctx.obj.api.head()  # Simple version check / connectivity check
    except CredentialsNotFound:
        err = f'Error: Credentials for {registry} could not be located (you may need to run docker login ... )'
    except CredentialsException as e:
        err = e
    if err:
        click.echo(err, err=True)
        sys.exit(1)
Ejemplo n.º 8
0
def test_known(fake_user_home):
    """Tests DockerCredentials.known under expected environment"""
    assert DockerCredentials().known == [REGISTRY]
Ejemplo n.º 9
0
def test_unsupported_handling(fake_user_home):
    """Tests we handle unsupported credential stores with informative exception"""
    with pytest.raises(UnsupportedStore, match='not supported'):
        DockerCredentials().get_login(REGISTRY)
Ejemplo n.º 10
0
def reg_tab(ctx: click.core.Context, args: list, incomplete: str) -> list:
    """Tab completion helper for registry argument"""
    credentials = DockerCredentials()
    return [r for r in credentials.known if incomplete in r]