Ejemplo n.º 1
0
def test_interactive_retry_cancel(context: CfnginContext) -> None:
    """Test interactive retry cancel."""
    lines = ["garbage", "cancel"]
    with mock_input(lines) as _input:
        result = ensure_keypair_exists(context, keypair=KEY_PAIR_NAME)
        assert _input.call_count == 2
    assert result == {}
Ejemplo n.º 2
0
def test_param_validation(provider, context):
    """Test param validation."""
    result = ensure_keypair_exists(provider,
                                   context,
                                   keypair=KEY_PAIR_NAME,
                                   ssm_parameter_name='test',
                                   public_key_path='test')
    assert result is False
Ejemplo n.º 3
0
def test_interactive_non_terminal_input(provider, context):
    """Test interactive non terminal input."""
    with mock_input(isatty=False) as _input:
        result = ensure_keypair_exists(provider,
                                       context,
                                       keypair=KEY_PAIR_NAME)
        _input.assert_not_called()
    assert result is False
Ejemplo n.º 4
0
def test_import_bad_key_data(tmp_path: Path, context: CfnginContext) -> None:
    """Test import bad key data."""
    pub_key = tmp_path / "id_rsa.pub"
    pub_key.write_text("garbage")

    result = ensure_keypair_exists(context,
                                   keypair=KEY_PAIR_NAME,
                                   public_key_path=str(pub_key))
    assert result == {}
Ejemplo n.º 5
0
def test_param_validation(context: CfnginContext) -> None:
    """Test param validation."""
    result = ensure_keypair_exists(
        context,
        keypair=KEY_PAIR_NAME,
        ssm_parameter_name="test",
        public_key_path="test",
    )
    assert result == {}
Ejemplo n.º 6
0
def test_keypair_exists(provider, context):
    """Test keypair exists."""
    ec2 = boto3.client('ec2')
    keypair = ec2.create_key_pair(KeyName=KEY_PAIR_NAME)

    result = ensure_keypair_exists(provider, context, keypair=KEY_PAIR_NAME)
    expected = dict(status='exists',
                    key_name=KEY_PAIR_NAME,
                    fingerprint=keypair['KeyFingerprint'])
    assert result == expected
Ejemplo n.º 7
0
def test_interactive_retry_cancel(provider, context):
    """Test interactive retry cancel."""
    lines = ['garbage', 'cancel']
    with mock_input(lines) as _input:
        result = ensure_keypair_exists(provider,
                                       context,
                                       keypair=KEY_PAIR_NAME)
        assert _input.call_count == 2

    assert result is False
Ejemplo n.º 8
0
def test_import_bad_key_data(tmpdir, provider, context):
    """Test import bad key data."""
    pub_key = tmpdir.join("id_rsa.pub")
    pub_key.write('garbage')

    result = ensure_keypair_exists(provider,
                                   context,
                                   keypair=KEY_PAIR_NAME,
                                   public_key_path=str(pub_key))
    assert result is False
Ejemplo n.º 9
0
def test_interactive_create_bad_dir(tmp_path: Path,
                                    context: CfnginContext) -> None:
    """Test interactive create bad dir."""
    key_dir = tmp_path / "missing"

    lines = ["create", str(key_dir)]
    with mock_input(lines):
        result = ensure_keypair_exists(context, keypair=KEY_PAIR_NAME)

    assert result == {}
Ejemplo n.º 10
0
def test_keypair_exists(context: CfnginContext) -> None:
    """Test keypair exists."""
    ec2 = boto3.client("ec2")
    keypair = ec2.create_key_pair(KeyName=KEY_PAIR_NAME)

    result = ensure_keypair_exists(context, keypair=KEY_PAIR_NAME)
    expected = dict(  # type: ignore
        status="exists",
        key_name=KEY_PAIR_NAME,
        fingerprint=keypair["KeyFingerprint"])
    assert result == expected
Ejemplo n.º 11
0
def test_interactive_create_bad_dir(tmpdir, provider, context):
    """Test interactive create bad dir."""
    key_dir = tmpdir.join('missing')

    lines = ['create', str(key_dir)]
    with mock_input(lines):
        result = ensure_keypair_exists(provider,
                                       context,
                                       keypair=KEY_PAIR_NAME)

    assert result is False
Ejemplo n.º 12
0
def test_import_file(tmpdir, provider, context, ssh_key):
    """Test import file."""
    pub_key = tmpdir.join("id_rsa.pub")
    pub_key.write(ssh_key.public_key)

    result = ensure_keypair_exists(provider,
                                   context,
                                   keypair=KEY_PAIR_NAME,
                                   public_key_path=str(pub_key))
    assert_key_present(result, KEY_PAIR_NAME, ssh_key.fingerprint)
    assert result['status'] == 'imported'
Ejemplo n.º 13
0
def test_import_file(tmp_path: Path, context: CfnginContext,
                     ssh_key: SSHKey) -> None:
    """Test import file."""
    pub_key = tmp_path / "id_rsa.pub"
    pub_key.write_bytes(ssh_key.public_key)

    result = ensure_keypair_exists(context,
                                   keypair=KEY_PAIR_NAME,
                                   public_key_path=str(pub_key))
    assert_key_present(result, KEY_PAIR_NAME, ssh_key.fingerprint)
    assert result["status"] == "imported"
Ejemplo n.º 14
0
def test_interactive_import(tmp_path: Path, context: CfnginContext,
                            ssh_key: SSHKey) -> None:
    """."""
    key_file = tmp_path / "id_rsa.pub"
    key_file.write_bytes(ssh_key.public_key)

    lines = ["import", str(key_file)]
    with mock_input(lines):
        result = ensure_keypair_exists(context, keypair=KEY_PAIR_NAME)

    assert_key_present(result, KEY_PAIR_NAME, ssh_key.fingerprint)
    assert result["status"] == "imported"
Ejemplo n.º 15
0
def test_interactive_create_existing_file(tmp_path: Path,
                                          context: CfnginContext) -> None:
    """Test interactive create existing file."""
    key_dir = tmp_path / "keys"
    key_dir.mkdir(exist_ok=True, parents=True)
    key_file = key_dir / f"{KEY_PAIR_NAME}.pem"
    key_file.touch()

    lines = ["create", str(key_dir)]
    with mock_input(lines):
        result = ensure_keypair_exists(context, keypair=KEY_PAIR_NAME)

    assert result == {}
Ejemplo n.º 16
0
def test_interactive_import(tmpdir, provider, context, ssh_key):
    """."""
    key_file = tmpdir.join("id_rsa.pub")
    key_file.write(ssh_key.public_key)

    lines = ['import', str(key_file)]
    with mock_input(lines):
        result = ensure_keypair_exists(provider,
                                       context,
                                       keypair=KEY_PAIR_NAME)

    assert_key_present(result, KEY_PAIR_NAME, ssh_key.fingerprint)
    assert result['status'] == 'imported'
Ejemplo n.º 17
0
def test_interactive_create_existing_file(tmpdir, provider, context):
    """Test interactive create existing file."""
    key_dir = tmpdir.join('keys')
    key_dir.ensure_dir()
    key_file = key_dir.join('{}.pem'.format(KEY_PAIR_NAME))
    key_file.ensure()

    lines = ['create', str(key_dir)]
    with mock_input(lines):
        result = ensure_keypair_exists(provider,
                                       context,
                                       keypair=KEY_PAIR_NAME)

    assert result is False
Ejemplo n.º 18
0
def test_interactive_create(tmp_path: Path, context: CfnginContext,
                            ssh_key: SSHKey) -> None:
    """Test interactive create."""
    key_dir = tmp_path / "keys"
    key_dir.mkdir(parents=True, exist_ok=True)
    key_file = key_dir / f"{KEY_PAIR_NAME}.pem"

    lines = ["create", str(key_dir)]
    with mock_input(lines):
        result = ensure_keypair_exists(context, keypair=KEY_PAIR_NAME)

    assert_key_present(result, KEY_PAIR_NAME, ssh_key.fingerprint)
    assert result["status"] == "created"
    assert key_file.samefile(result["file_path"])
    assert key_file.read_bytes() == ssh_key.private_key
Ejemplo n.º 19
0
def test_interactive_create(tmpdir, provider, context, ssh_key):
    """Test interactive create."""
    key_dir = tmpdir.join('keys')
    key_dir.ensure_dir()
    key_file = key_dir.join('{}.pem'.format(KEY_PAIR_NAME))

    lines = ['create', str(key_dir)]
    with mock_input(lines):
        result = ensure_keypair_exists(provider,
                                       context,
                                       keypair=KEY_PAIR_NAME)

    assert_key_present(result, KEY_PAIR_NAME, ssh_key.fingerprint)
    assert result['status'] == 'created'
    assert key_file.samefile(result['file_path'])
    assert key_file.read_binary() == ssh_key.private_key
Ejemplo n.º 20
0
def test_create_in_ssm(provider, context, ssh_key, ssm_key_id):
    """Test create in ssm."""
    result = ensure_keypair_exists(provider,
                                   context,
                                   keypair=KEY_PAIR_NAME,
                                   ssm_parameter_name='param',
                                   ssm_key_id=ssm_key_id)

    assert_key_present(result, KEY_PAIR_NAME, ssh_key.fingerprint)
    assert result['status'] == 'created'

    ssm = boto3.client('ssm')
    param = ssm.get_parameter(Name='param', WithDecryption=True)['Parameter']
    assert param['Value'] == ssh_key.private_key.decode('ascii')
    assert param['Type'] == 'SecureString'

    params = ssm.describe_parameters()['Parameters']
    param_details = next(p for p in params if p['Name'] == 'param')
    assert param_details['Description'] == \
        'SSH private key for KeyPair "{}" (generated by Runway)'.format(
            KEY_PAIR_NAME)
    assert param_details.get('KeyId') == ssm_key_id
Ejemplo n.º 21
0
def test_create_in_ssm(context: CfnginContext, ssh_key: SSHKey,
                       ssm_key_id: str) -> None:
    """Test create in ssm."""
    result = ensure_keypair_exists(
        context,
        keypair=KEY_PAIR_NAME,
        ssm_parameter_name="param",
        ssm_key_id=ssm_key_id,
    )

    assert_key_present(result, KEY_PAIR_NAME, ssh_key.fingerprint)
    assert result["status"] == "created"

    ssm = boto3.client("ssm")
    param = ssm.get_parameter(Name="param", WithDecryption=True)["Parameter"]
    assert param["Value"] == ssh_key.private_key.decode("ascii")
    assert param["Type"] == "SecureString"

    params = ssm.describe_parameters()["Parameters"]
    param_details = next(p for p in params if p["Name"] == "param")
    assert param_details[
        "Description"] == 'SSH private key for KeyPair "{}" (generated by Runway)'.format(
            KEY_PAIR_NAME)
    assert param_details.get("KeyId") == ssm_key_id
Ejemplo n.º 22
0
def test_interactive_non_terminal_input(context: CfnginContext) -> None:
    """Test interactive non terminal input."""
    with mock_input(isatty=False) as _input:
        result = ensure_keypair_exists(context, keypair=KEY_PAIR_NAME)
        _input.assert_not_called()
    assert result == {}