Module harvester_e2e_tests.integrations.test_z_terraform
Functions
def clusternetwork_resource(unique_name, tf_resource)
-
Expand source code
@pytest.fixture(scope="module") def clusternetwork_resource(unique_name, tf_resource): name = f"cnet-{datetime.strptime(unique_name, '%Hh%Mm%Ss%f-%m-%d').strftime('%H%M%S')}" spec = tf_resource.cluster_network(f"tf_{unique_name}", name) return spec, name
def image_resource(unique_name, image_opensuse, tf_resource)
-
Expand source code
@pytest.fixture(scope="module") def image_resource(unique_name, image_opensuse, tf_resource): spec = tf_resource.image_download( f"tf_{unique_name}", unique_name, unique_name, image_opensuse.url ) return spec, unique_name, image_opensuse
def ssh_key_resource(ssh_keypair, unique_name, tf_resource)
-
Expand source code
@pytest.fixture(scope="module") def ssh_key_resource(ssh_keypair, unique_name, tf_resource): pub_key, _ = ssh_keypair spec = tf_resource.ssh_key(f"tf_{unique_name}", unique_name, pub_key) return spec, unique_name, pub_key
def test_create_image(api_client, tf_harvester, image_resource)
-
Expand source code
@pytest.mark.p0 @pytest.mark.terraform @pytest.mark.dependency(name="create_image") def test_create_image(api_client, tf_harvester, image_resource): spec, unique_name, img_info = image_resource tf_harvester.save_as(spec.ctx, "images") out, err, code = tf_harvester.apply_resource(spec.type, spec.name) assert not err and 0 == code code, data = api_client.images.get(unique_name) assert 200 == code assert img_info.url == data['spec']['url']
def test_create_ssh_key(api_client, tf_harvester, ssh_key_resource)
-
Expand source code
@pytest.mark.p0 @pytest.mark.terraform @pytest.mark.dependency(name="create_ssh_key") def test_create_ssh_key(api_client, tf_harvester, ssh_key_resource): spec, unique_name, _ = ssh_key_resource tf_harvester.save_as(spec.ctx, "ssh_key") out, err, code = tf_harvester.apply_resource(spec.type, spec.name) assert not err and 0 == code code, data = api_client.keypairs.get(unique_name) assert 200 == code
def test_create_volume(api_client, tf_harvester, volume_resource)
-
Expand source code
@pytest.mark.p0 @pytest.mark.terraform @pytest.mark.dependency(name="create_volume") def test_create_volume(api_client, tf_harvester, volume_resource): spec, unique_name, size = volume_resource tf_harvester.save_as(spec.ctx, "volumes") out, err, code = tf_harvester.apply_resource(spec.type, spec.name) assert not err and 0 == code code, data = api_client.volumes.get(unique_name) assert 200 == code vol_spec = api_client.volumes.Spec.from_dict(data) assert size == vol_spec.size
def test_create_volume_from_image(api_client, tf_harvester, tf_resource, image_resource)
-
Expand source code
@pytest.mark.p0 @pytest.mark.terraform def test_create_volume_from_image(api_client, tf_harvester, tf_resource, image_resource): spec, unique_name, img_info = image_resource tf_harvester.save_as(spec.ctx, "images") out, err, code = tf_harvester.apply_resource(spec.type, spec.name) assert not err and 0 == code code, data = api_client.images.get(unique_name) vol_name, size = f"vol-from-img-{unique_name}", "10Gi" spec = tf_resource.volume( f"tf_{vol_name}", vol_name, size, image=f"{data['metadata']['namespace']}/{unique_name}" ) tf_harvester.save_as(spec.ctx, "vol_from_img") out, err, code = tf_harvester.apply_resource(spec.type, spec.name) assert not err and 0 == code code, data = api_client.volumes.get(vol_name) assert 200 == code vol_spec = api_client.volumes.Spec.from_dict(data) assert size == vol_spec.size # Teardown api_client.volumes.delete(vol_name)
def test_delete_image(api_client, wait_timeout, tf_harvester, image_resource)
-
Expand source code
@pytest.mark.p0 @pytest.mark.terraform @pytest.mark.dependency(depends=["create_image"]) def test_delete_image(api_client, wait_timeout, tf_harvester, image_resource): spec, unique_name, _ = image_resource out, err, rc = tf_harvester.destroy_resource(spec.type, spec.name) assert not err and 0 == rc endtime = datetime.now() + timedelta(seconds=wait_timeout) while endtime > datetime.now(): code, data = api_client.images.get(unique_name) if 404 == code: break else: raise AssertionError( "Terraform destroy image fail\n" f"stdout: {out}\nstderr: {err}, code: {rc}" )
def test_delete_ssh_key(api_client, tf_harvester, ssh_key_resource)
-
Expand source code
@pytest.mark.p0 @pytest.mark.terraform @pytest.mark.dependency(depends=["create_ssh_key"]) def test_delete_ssh_key(api_client, tf_harvester, ssh_key_resource): spec, unique_name, _ = ssh_key_resource out, err, code = tf_harvester.destroy_resource(spec.type, spec.name) assert not err and 0 == code code, data = api_client.keypairs.get(unique_name) assert 404 == code
def test_delete_volume(api_client, wait_timeout, tf_harvester, volume_resource)
-
Expand source code
@pytest.mark.p0 @pytest.mark.terraform @pytest.mark.dependency(depends=["create_volume"]) def test_delete_volume(api_client, wait_timeout, tf_harvester, volume_resource): spec, unique_name, _ = volume_resource out, err, rc = tf_harvester.destroy_resource(spec.type, spec.name) assert not err and 0 == rc endtime = datetime.now() + timedelta(seconds=wait_timeout) while endtime > datetime.now(): code, data = api_client.volumes.get(unique_name) if 404 == code: break else: raise AssertionError( "Terraform destroy volume fail\n" f"stdout: {out}\nstderr:{err}, code: {rc}" )
def vlanconfig_resource(request, unique_name, tf_resource, clusternetwork_resource)
-
Expand source code
@pytest.fixture(scope="module") def vlanconfig_resource(request, unique_name, tf_resource, clusternetwork_resource): vlan_nic = request.config.getoption('--vlan-nic') assert vlan_nic, f"VLAN NIC {vlan_nic} not configured correctly." _, clusternetwork_name = clusternetwork_resource name, nics = f"{clusternetwork_name}-{vlan_nic}".lower(), [vlan_nic] spec = tf_resource.vlanconfig(f"tf_{unique_name}", name, clusternetwork_name, nics) return spec, name, clusternetwork_name, nics
def vmnetwork_resource(request, unique_name, tf_resource, clusternetwork_resource)
-
Expand source code
@pytest.fixture(scope="module") def vmnetwork_resource(request, unique_name, tf_resource, clusternetwork_resource): vlan_id = request.config.getoption('--vlan-id') assert 4095 > vlan_id > 0, (f"VLAN ID should in range 1-4094, not {vlan_id}") _, clusternetwork_name = clusternetwork_resource spec = tf_resource.network(f"tf_{unique_name}", unique_name, vlan_id, clusternetwork_name) return spec, unique_name, vlan_id, clusternetwork_name
def volume_resource(unique_name, tf_resource)
-
Expand source code
@pytest.fixture(scope="module") def volume_resource(unique_name, tf_resource): size = "2Gi" spec = tf_resource.volume(f"tf_{unique_name}", unique_name, size) return spec, unique_name, size
Classes
class TestNetworking
-
Expand source code
@pytest.mark.p0 @pytest.mark.terraform class TestNetworking: @pytest.mark.dependency(name="create_clusternetwork") def test_create_clusternetwork(self, api_client, tf_harvester, clusternetwork_resource): spec, unique_name = clusternetwork_resource tf_harvester.save_as(spec.ctx, "clusternetwork") out, err, code = tf_harvester.apply_resource(spec.type, spec.name) assert not err and 0 == code code, data = api_client.clusternetworks.get(unique_name) assert 200 == code @pytest.mark.dependency(name="create_vlanconfig", depends=["create_clusternetwork"]) def test_create_vlanconfig(self, api_client, tf_harvester, vlanconfig_resource): spec, unique_name, cnet_name, nics = vlanconfig_resource tf_harvester.save_as(spec.ctx, "vlanconfig") out, err, code = tf_harvester.apply_resource(spec.type, spec.name) assert not err and 0 == code code, data = api_client.clusternetworks.get_config(unique_name) assert 200 == code assert cnet_name == data['spec']['clusterNetwork'] assert nics == data['spec']['uplink']['nics'] @pytest.mark.dependency(name="create_vm_network", depends=["create_vlanconfig"]) def test_create_vm_network(self, api_client, tf_harvester, vmnetwork_resource): spec, unique_name, vlan_id, cnet_name = vmnetwork_resource tf_harvester.save_as(spec.ctx, "vmnetwork") out, err, code = tf_harvester.apply_resource(spec.type, spec.name) assert not err and 0 == code code, data = api_client.networks.get(unique_name) assert 200 == code config = json.loads(data['spec'].get('config', "")) assert vlan_id == config['vlan'] assert cnet_name in config['bridge'] @pytest.mark.dependency(depends=["create_vm_network"]) def test_delete_vm_network(self, api_client, tf_harvester, vmnetwork_resource): spec, unique_name, *_ = vmnetwork_resource out, err, code = tf_harvester.destroy_resource(spec.type, spec.name) assert not err and 0 == code code, data = api_client.networks.get(unique_name) assert 404 == code @pytest.mark.dependency(depends=["create_vlanconfig"]) def test_delete_vlanconfig(self, api_client, wait_timeout, tf_harvester, vlanconfig_resource): spec, unique_name, *_ = vlanconfig_resource out, err, rc = tf_harvester.destroy_resource(spec.type, spec.name) assert not err and 0 == rc endtime = datetime.now() + timedelta(seconds=wait_timeout) while endtime > datetime.now(): code, data = api_client.clusternetworks.get_config(unique_name) if 404 == code: break else: raise AssertionError( "Terraform destroy vlanconfig fail\n" f"stdout: {out}\nstderr: {err}, code: {rc}" ) @pytest.mark.dependency(depends=["create_clusternetwork"]) def test_delete_clusternetwork( self, api_client, wait_timeout, tf_harvester, clusternetwork_resource ): spec, unique_name, *_ = clusternetwork_resource out, err, rc = tf_harvester.destroy_resource(spec.type, spec.name) assert not err and 0 == rc endtime = datetime.now() + timedelta(seconds=wait_timeout) while endtime > datetime.now(): code, data = api_client.clusternetworks.get(unique_name) if 404 == code: break else: raise AssertionError( "Terraform destroy clusternetwork fail\n" f"stdout: {out}\nstderr: {err}, code: {rc}" )
Class variables
var pytestmark
Methods
def test_create_clusternetwork(self, api_client, tf_harvester, clusternetwork_resource)
-
Expand source code
@pytest.mark.dependency(name="create_clusternetwork") def test_create_clusternetwork(self, api_client, tf_harvester, clusternetwork_resource): spec, unique_name = clusternetwork_resource tf_harvester.save_as(spec.ctx, "clusternetwork") out, err, code = tf_harvester.apply_resource(spec.type, spec.name) assert not err and 0 == code code, data = api_client.clusternetworks.get(unique_name) assert 200 == code
def test_create_vlanconfig(self, api_client, tf_harvester, vlanconfig_resource)
-
Expand source code
@pytest.mark.dependency(name="create_vlanconfig", depends=["create_clusternetwork"]) def test_create_vlanconfig(self, api_client, tf_harvester, vlanconfig_resource): spec, unique_name, cnet_name, nics = vlanconfig_resource tf_harvester.save_as(spec.ctx, "vlanconfig") out, err, code = tf_harvester.apply_resource(spec.type, spec.name) assert not err and 0 == code code, data = api_client.clusternetworks.get_config(unique_name) assert 200 == code assert cnet_name == data['spec']['clusterNetwork'] assert nics == data['spec']['uplink']['nics']
def test_create_vm_network(self, api_client, tf_harvester, vmnetwork_resource)
-
Expand source code
@pytest.mark.dependency(name="create_vm_network", depends=["create_vlanconfig"]) def test_create_vm_network(self, api_client, tf_harvester, vmnetwork_resource): spec, unique_name, vlan_id, cnet_name = vmnetwork_resource tf_harvester.save_as(spec.ctx, "vmnetwork") out, err, code = tf_harvester.apply_resource(spec.type, spec.name) assert not err and 0 == code code, data = api_client.networks.get(unique_name) assert 200 == code config = json.loads(data['spec'].get('config', "")) assert vlan_id == config['vlan'] assert cnet_name in config['bridge']
def test_delete_clusternetwork(self, api_client, wait_timeout, tf_harvester, clusternetwork_resource)
-
Expand source code
@pytest.mark.dependency(depends=["create_clusternetwork"]) def test_delete_clusternetwork( self, api_client, wait_timeout, tf_harvester, clusternetwork_resource ): spec, unique_name, *_ = clusternetwork_resource out, err, rc = tf_harvester.destroy_resource(spec.type, spec.name) assert not err and 0 == rc endtime = datetime.now() + timedelta(seconds=wait_timeout) while endtime > datetime.now(): code, data = api_client.clusternetworks.get(unique_name) if 404 == code: break else: raise AssertionError( "Terraform destroy clusternetwork fail\n" f"stdout: {out}\nstderr: {err}, code: {rc}" )
def test_delete_vlanconfig(self, api_client, wait_timeout, tf_harvester, vlanconfig_resource)
-
Expand source code
@pytest.mark.dependency(depends=["create_vlanconfig"]) def test_delete_vlanconfig(self, api_client, wait_timeout, tf_harvester, vlanconfig_resource): spec, unique_name, *_ = vlanconfig_resource out, err, rc = tf_harvester.destroy_resource(spec.type, spec.name) assert not err and 0 == rc endtime = datetime.now() + timedelta(seconds=wait_timeout) while endtime > datetime.now(): code, data = api_client.clusternetworks.get_config(unique_name) if 404 == code: break else: raise AssertionError( "Terraform destroy vlanconfig fail\n" f"stdout: {out}\nstderr: {err}, code: {rc}" )
def test_delete_vm_network(self, api_client, tf_harvester, vmnetwork_resource)
-
Expand source code
@pytest.mark.dependency(depends=["create_vm_network"]) def test_delete_vm_network(self, api_client, tf_harvester, vmnetwork_resource): spec, unique_name, *_ = vmnetwork_resource out, err, code = tf_harvester.destroy_resource(spec.type, spec.name) assert not err and 0 == code code, data = api_client.networks.get(unique_name) assert 404 == code