def test_create_upgrade_path_not_supported(self): # Test creation of upgrade when upgrade path is not supported create_dict = dbutils.post_get_test_kube_upgrade(to_version='v1.43.3') result = self.post_json('/kube_upgrade', create_dict, headers={'User-Agent': 'sysinv-test'}, expect_errors=True) # Verify the failure self.assertEqual(result.content_type, 'application/json') self.assertEqual(http_client.BAD_REQUEST, result.status_int) self.assertIn("version v1.43.1 cannot upgrade to", result.json['error_message'])
def test_create_target_version_does_not_exist(self): # Test creation of upgrade when target version doesn't exist create_dict = dbutils.post_get_test_kube_upgrade(to_version='v1.45.45') result = self.post_json('/kube_upgrade', create_dict, headers={'User-Agent': 'sysinv-test'}, expect_errors=True) # Verify the failure self.assertEqual(result.content_type, 'application/json') self.assertEqual(http_client.BAD_REQUEST, result.status_int) self.assertIn("version v1.45.45 is not available", result.json['error_message'])
def test_create_available_patch_missing(self): # Test creation of upgrade when available patch is missing self.mock_patch_is_available_result = False create_dict = dbutils.post_get_test_kube_upgrade(to_version='v1.43.2') result = self.post_json('/kube_upgrade', create_dict, headers={'User-Agent': 'sysinv-test'}, expect_errors=True) # Verify the failure self.assertEqual(result.content_type, 'application/json') self.assertEqual(http_client.BAD_REQUEST, result.status_int) self.assertIn("The following patches must be available", result.json['error_message'])
def test_create_system_unhealthy(self): # Test creation of upgrade when system health check fails self.fake_conductor_api.get_system_health_return = ( False, "System is very very unhealthy") create_dict = dbutils.post_get_test_kube_upgrade(to_version='v1.43.2') result = self.post_json('/kube_upgrade', create_dict, headers={'User-Agent': 'sysinv-test'}, expect_errors=True) # Verify the failure self.assertEqual(result.content_type, 'application/json') self.assertEqual(http_client.BAD_REQUEST, result.status_int) self.assertIn("System is not in a valid state", result.json['error_message'])
def test_create_system_unhealthy_force(self): # Test creation of upgrade when system health check fails but # overridden with force self.fake_conductor_api.get_system_health_return = ( False, "System is very very unhealthy") create_dict = dbutils.post_get_test_kube_upgrade(to_version='v1.43.2') create_dict['force'] = True result = self.post_json('/kube_upgrade', create_dict, headers={'User-Agent': 'sysinv-test'}) # Verify that the upgrade has the expected attributes self.assertEqual(result.json['from_version'], 'v1.43.1') self.assertEqual(result.json['to_version'], 'v1.43.2') self.assertEqual(result.json['state'], kubernetes.KUBE_UPGRADE_STARTED)
def test_create(self): # Test creation of upgrade create_dict = dbutils.post_get_test_kube_upgrade(to_version='v1.43.2') result = self.post_json('/kube_upgrade', create_dict, headers={'User-Agent': 'sysinv-test'}) # Verify that the upgrade has the expected attributes self.assertEqual(result.json['from_version'], 'v1.43.1') self.assertEqual(result.json['to_version'], 'v1.43.2') self.assertEqual(result.json['state'], kubernetes.KUBE_UPGRADE_STARTED) # Verify that the target version for the host was updated kube_host_upgrade = self.dbapi.kube_host_upgrade_get_by_host( self.host.id) self.assertEqual('v1.43.1', kube_host_upgrade.target_version)
def test_create_system_unhealthy_from_alarms(self): """Test creation of a kube upgrade while there are alarms""" # Test creation of upgrade when system health check fails # 1 alarm, when force is not specified will return False self.mock_check_alarms.return_value = (False, 1, 0) create_dict = dbutils.post_get_test_kube_upgrade(to_version='v1.43.2') result = self.post_json('/kube_upgrade', create_dict, headers={'User-Agent': 'sysinv-test'}, expect_errors=True) # Verify the failure self.assertEqual(result.content_type, 'application/json') self.assertEqual(http_client.BAD_REQUEST, result.status_int) self.assertIn("System is not in a valid state", result.json['error_message'])
def test_create_current_version_not_active(self): # Test creation of upgrade when current version is not active self.kube_get_version_states_result = {'v1.42.1': 'available', 'v1.42.2': 'available', 'v1.43.1': 'partial', 'v1.43.2': 'available', 'v1.43.3': 'available'} create_dict = dbutils.post_get_test_kube_upgrade(to_version='v1.43.2') result = self.post_json('/kube_upgrade', create_dict, headers={'User-Agent': 'sysinv-test'}, expect_errors=True) # Verify the failure self.assertEqual(result.content_type, 'application/json') self.assertEqual(http_client.BAD_REQUEST, result.status_int) self.assertIn("version v1.43.1 is not active", result.json['error_message'])
def test_create_upgrade_exists(self): # Test creation of upgrade when upgrade already exists dbutils.create_test_kube_upgrade( from_version='v1.42.1', to_version='v1.42.2', state=kubernetes.KUBE_UPGRADING_FIRST_MASTER, ) create_dict = dbutils.post_get_test_kube_upgrade(to_version='v1.43.2') result = self.post_json('/kube_upgrade', create_dict, headers={'User-Agent': 'sysinv-test'}, expect_errors=True) # Verify the failure self.assertEqual(result.content_type, 'application/json') self.assertEqual(http_client.BAD_REQUEST, result.status_int) self.assertIn("upgrade is already in progress", result.json['error_message'])
def test_create_platform_upgrade_exists(self): # Test creation of upgrade when platform upgrade in progress dbutils.create_test_load(software_version=dbutils.SW_VERSION_NEW, compatible_version=dbutils.SW_VERSION, state=constants.IMPORTED_LOAD_STATE) dbutils.create_test_upgrade() create_dict = dbutils.post_get_test_kube_upgrade(to_version='v1.43.2') result = self.post_json('/kube_upgrade', create_dict, headers={'User-Agent': 'sysinv-test'}, expect_errors=True) # Verify the failure self.assertEqual(result.content_type, 'application/json') self.assertEqual(http_client.BAD_REQUEST, result.status_int) self.assertIn("upgrade cannot be done while a platform upgrade", result.json['error_message'])
def test_force_create_system_unhealthy_from_alarms(self): # Test creation of upgrade when system health check fails but # overridden with force # mock a 'non' mgmt_affecting alarm, upgrade can be forced self.fake_fm_client.alarm.list.return_value = \ [FAKE_NON_MGMT_AFFECTING_ALARM, ] create_dict = dbutils.post_get_test_kube_upgrade(to_version='v1.43.2') create_dict['force'] = True result = self.post_json('/kube_upgrade', create_dict, headers={'User-Agent': 'sysinv-test'}) # Verify that the upgrade has the expected attributes self.assertEqual(result.json['from_version'], 'v1.43.1') self.assertEqual(result.json['to_version'], 'v1.43.2') self.assertEqual(result.json['state'], kubernetes.KUBE_UPGRADE_STARTED)
def test_force_create_system_unhealthy_from_mgmt_affecting_alarms(self): """ Test kube upgrade create fails when mgmt affecting alarms found""" # mock a mgmt_affecting alarm, upgrade cannot be forced self.mock_check_alarms.return_value = (False, 0, 1) create_dict = dbutils.post_get_test_kube_upgrade( to_version='v1.43.2') create_dict['force'] = True result = self.post_json('/kube_upgrade', create_dict, headers={'User-Agent': 'sysinv-test'}, expect_errors=True) # Verify that the upgrade has the expected attributes self.assertEqual(result.content_type, 'application/json') self.assertEqual(http_client.BAD_REQUEST, result.status_int) self.assertIn("System is not in a valid state", result.json['error_message'])
def test_create_no_patches_required(self): # Test creation of upgrade when no applied patches are required self.mock_patch_is_applied_result = False self.mock_patch_is_available_result = False self.kube_get_kubernetes_version_result = 'v1.43.2' self.kube_get_version_states_result = {'v1.42.1': 'available', 'v1.42.2': 'available', 'v1.43.1': 'available', 'v1.43.2': 'active', 'v1.43.3': 'available'} create_dict = dbutils.post_get_test_kube_upgrade(to_version='v1.43.3') result = self.post_json('/kube_upgrade', create_dict, headers={'User-Agent': 'sysinv-test'}) # Verify that the upgrade has the expected attributes self.assertEqual(result.json['from_version'], 'v1.43.2') self.assertEqual(result.json['to_version'], 'v1.43.3') self.assertEqual(result.json['state'], kubernetes.KUBE_UPGRADE_STARTED)
def test_create_installed_app_not_compatible(self): # Test creation of upgrade when the installed application isn't # compatible with the new kubernetes version # Create application dbutils.create_test_app(name='stx-openstack', app_version='1.0-19', manifest_name='openstack-armada-manifest', manifest_file='stx-openstack.yaml', status='applied', active=True) create_dict = dbutils.post_get_test_kube_upgrade(to_version='v1.43.2') result = self.post_json('/kube_upgrade', create_dict, headers={'User-Agent': 'sysinv-test'}, expect_errors=True) # Verify the failure self.assertEqual(result.content_type, 'application/json') self.assertEqual(http_client.BAD_REQUEST, result.status_int) self.assertIn("incompatible with the new Kubernetes version v1.43.2", result.json['error_message'])
def test_create_system_unhealthy_from_bad_apps(self): """ Test kube upgrade create fails when invalid kube app found""" # The app is not fully setup, health query should fail dbutils.create_test_app(name='broken-app', status=constants.APP_APPLY_IN_PROGRESS) # Test creation of upgrade when system health check fails from bad app create_dict = dbutils.post_get_test_kube_upgrade(to_version='v1.43.2') create_dict['force'] = True result = self.post_json('/kube_upgrade', create_dict, headers={'User-Agent': 'sysinv-test'}, expect_errors=True) # Verify that the upgrade has the expected attributes self.assertEqual(result.content_type, 'application/json') self.assertEqual(http_client.BAD_REQUEST, result.status_int) # The error should contain the following: # System is not in a valid state for kubernetes upgrade. # Run system health-query-kube-upgrade for more details. self.assertIn("Run system health-query-kube-upgrade for more details.", result.json['error_message'])