#  Copyright 2019 Canonical Ltd.

#  Licensed under the Apache License, Version 2.0 (the "License");
#  you may not use this file except in compliance with the License.
#  You may obtain a copy of the License at

#      http://www.apache.org/licenses/LICENSE-2.0

#      Unless required by applicable law or agreed to in writing, software
#      distributed under the License is distributed on an "AS IS" BASIS,
#      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#      See the License for the specific language governing permissions and
#      limitations under the License.

"""
Test N2VC's ssh key generation
"""
import os
import pytest
from . import base
import tempfile


@pytest.mark.asyncio
async def test_ssh_keygen(monkeypatch):
    with tempfile.TemporaryDirectory() as tmpdirname:
        monkeypatch.setitem(os.environ, "HOME", tmpdirname)

        client = base.get_n2vc()

        public_key = await client.GetPublicKey()
        assert len(public_key)
