def __130_updating_initialized_project_is_successful(self): with self.spy_decorator( resource_manager.hook.HookContext.call_module_handlers ) as mock_call_module_handlers: self.lmbr_aws('project', 'update-framework-version', '--confirm-aws-usage', '--confirm-security-change', '--confirm-resource-deletion') mock_call_module_handlers.assert_any_call( 'resource-manager-code/update.py', 'before_framework_version_updated', kwargs={ 'from_version': Version('1.1.2'), 'to_version': self.CURRENT_FRAMEWORK_VERSION }) mock_call_module_handlers.assert_any_call( 'resource-manager-code/update.py', 'after_framework_version_updated', kwargs={ 'from_version': Version('1.1.2'), 'to_version': self.CURRENT_FRAMEWORK_VERSION })
def __do_lmbr_gems_create(self, lmbr_exe_path_override, gem_name, relative_directory_path, asset_only, version): gems_file_content = self.__get_gems_file_content() gem_names = [] for gem in gems_file_content.get('Gems', []): if gem.get('_comment', ''): gem_names.append(gem['_comment']) if gem_name in gem_names: raise HandledError( 'Cloud gems named {} exists in the project. Cloud gems must have unique names within a project.' .format(gem_name)) if relative_directory_path is None: relative_directory_path = os.path.join( gem_name, 'v' + str(Version(version).major)) full_directory_path = os.path.join( self.__context.config.root_directory_path, 'Gems', relative_directory_path) lmbr_exe_path = self.__get_lmbr_exe_path(lmbr_exe_path_override) args = [ lmbr_exe_path, 'gems', 'create', gem_name, '-version', version, '-out-folder', relative_directory_path ] if asset_only: args.append('-asset-only') try: self.__execute(args) except Exception as e: raise HandledError('Gem creation failed. {}'.format(e.message)) return full_directory_path
def test_cmp(self): v = Version("2.2.2") self.assertTrue(v == "2.2.2") self.assertTrue(v == Version("2.2.2")) self.assertTrue(v != "1.2.2") self.assertTrue(v != "2.1.2") self.assertTrue(v != "2.2.1") self.assertTrue(v > "2.2.1") self.assertTrue(v > "2.1.2") self.assertTrue(v > "2.0.0") self.assertTrue(v > "1.2.2") self.assertTrue(v < "2.2.3") self.assertTrue(v < "2.3.2") self.assertTrue(v < "3.2.2")
def parse_interface_id(interface_id): '''Returns a typle with three values: resource-group-name, interface-name, and interface-version''' try: parts = interface_id.split('_') if len(parts) != 5: raise RuntimeError() return parts[0], parts[1], Version('.'.join(parts[2:5])) except: raise RuntimeError( 'Could not parse interface id: {}. Expecting GemName_InterfaceName_Major_Minor_Revision.' .format(interface_id))
def test_is_compatible_with(self): v = Version("2.2.2") self.assertTrue(v.is_compatible_with("2.2.2")) self.assertTrue(v.is_compatible_with("2.2.1")) self.assertTrue(v.is_compatible_with("2.1.2")) self.assertTrue(v.is_compatible_with("2.0.0")) self.assertFalse(v.is_compatible_with("2.2.3")) self.assertFalse(v.is_compatible_with("2.3.2")) self.assertFalse(v.is_compatible_with("3.2.2")) self.assertFalse(v.is_compatible_with("1.2.2")) self.assertTrue(v.is_compatible_with(Version("2.2.2")))
def test_parse_interface_id_with_valid_id(self): expected_gem_name = 'TestGemName' expected_interface_name = 'TestInterfaceName' expected_interface_version = Version('1.2.3') interface_id = expected_gem_name + '_' + expected_interface_name + '_' + str(expected_interface_version).replace('.', '_') actual_gem_name, actual_interface_name, actual_interface_version = swagger_processor.interface.parse_interface_id(interface_id) self.assertEquals(actual_gem_name, expected_gem_name) self.assertEquals(actual_interface_name, expected_interface_name) self.assertEquals(actual_interface_version, expected_interface_version)
def __set_up_context(capabilities=None, framework_version: str = '1.1.5'): """ Set up the Context object that drives everything from a CloudCanvas POV :param capabilities: A list of CloudFormation capabilities to mock :param framework_version: The framework version to set :return: A context object that can be configured in the test """ if capabilities is None: capabilities = [] context = mock.MagicMock() context.config = mock.MagicMock() context.stack = mock.MagicMock() context.stack.confirm_stack_operation.return_value = capabilities context.config.local_project_settings = mock.MagicMock() context.config.framework_version = Version(framework_version) context.config.project_template_aggregator = mock.MagicMock() context.config.project_template_aggregator.effective_template = {} return context
'InviteMessageTemplate': { 'EmailMessage': email_invite_message, 'EmailSubject': email_invite_subject }, "AllowAdminCreateUserOnly": True }, AutoVerifiedAttributes=['email']) context.view._output_message( "The Cloud Gem Portal URL has been written to the Cognito user email template successfully." ) except ClientError: return # version constants V_1_0_0 = Version('1.0.0') V_1_1_0 = Version('1.1.0') V_1_1_1 = Version('1.1.1') V_1_1_2 = Version('1.1.2') V_1_1_3 = Version('1.1.3') V_1_1_4 = Version('1.1.4') def add_framework_version_update_writable_files(hook, from_version, to_version, writable_file_paths, **kwargs): # Repeat this pattern to add more upgrade processing: # # if from_version < VERSION_CHANGE_WAS_INTRODUCED: # add files that may be written to
'InviteMessageTemplate': { 'EmailMessage': email_invite_message, 'EmailSubject': email_invite_subject }, "AllowAdminCreateUserOnly": True }, AutoVerifiedAttributes=['email']) context.view._output_message( "The Cloud Gem Portal URL has been written to the Cognito user email template successfully." ) except ClientError: return # version constants V_1_0_0 = Version('1.0.0') V_1_1_0 = Version('1.1.0') V_1_1_1 = Version('1.1.1') V_1_1_2 = Version('1.1.2') V_1_1_3 = Version('1.1.3') V_1_1_4 = Version('1.1.4') V_1_1_5 = Version('1.1.5') # Version without CloudGemPortal def add_framework_version_update_writable_files(hook, from_version, to_version, writable_file_paths, **kwargs): # Repeat this pattern to add more upgrade processing: # # if from_version < VERSION_CHANGE_WAS_INTRODUCED: # add files that may be written to
def version(self): if self.__version is None: self.__version = Version( self.__gem_file_object.get('Version', '0.0.0')) return self.__version
def test_init(self): v = Version("1.2.3") self.assertEqual(v.major, 1) self.assertEqual(v.minor, 2) self.assertEqual(v.revision, 3)
def create_stack(context, args): """Implements the lmbr_aws initialize-project command.""" # Supported region? supported_regions = __get_region_list() if args.region not in supported_regions: raise HandledError('Region {} is not supported.'.format(args.region)) # Initialize AWS directory if needed. context.config.initialize_aws_directory() if args.files_only: return # Already initialized? if context.config.local_project_settings.project_stack_exists(): raise HandledError( 'The project has already been initialized and is using the {} AWS Cloud Formation stack.' .format(context.config.project_stack_id)) # Project settings writable? context.config.validate_writable( context.config.local_project_settings.path) # Check if optional admin roles are being created context.config.set_project_admin_roles( args.create_admin_roles if args. create_admin_roles is not None else False) # Check whether the custom domain for API Gateway is specified context.config.set_custom_domain_name( args.custom_domain_name if args.custom_domain_name else '') # Check if framework should try to deploy the CloudGemPortal portal_supported = context.config.framework_version < Version('1.1.5') context.config.set_deploy_cloud_gem_portal( args.deploy_cfp if args.deploycgp is not None else portal_supported) # Is it ok to do this? pending_resource_status = __get_pending_resource_status(context) if not re.match('^[a-z](?:[a-z0-9]*[\-]?[a-z0-9]+)*$', args.stack_name, re.I): raise HandledError( 'Project stack name can only consist of letters, numbers, non-repeating hyphens and must start with a letter: {}' .format(args.stack_name)) capabilities = context.stack.confirm_stack_operation( context.config.get_pending_project_stack_id( ), # may be None, which is ok 'project', args, pending_resource_status) # Skip creating the stack if we have already done so. if not context.config.get_pending_project_stack_id(): # Use game directory name as stack name by default. if args.stack_name is None: args.stack_name = context.config.game_directory_name # Does a stack with the name already exist? if context.stack.name_exists(args.stack_name, args.region): message = 'An AWS Cloud Formation stack with the name {} already exists in region {}. Use the --stack-name option to provide a different name.'.format( args.stack_name, args.region) raise HandledError(message) # Is the stack name valid? util.validate_stack_name(args.stack_name) # Ensure new stacks always has this set parameters = { CREATE_ADMIN_ROLE_PARAM_NAME: "true" if args.create_admin_roles else "false" } parameters[ constant. CUSTOM_DOMAIN_NAME] = args.custom_domain_name if args.custom_domain_name else '' # Create stack using the bootstrapping template. context.stack.create_using_template( args.stack_name, bootstrap_template, args.region, created_callback=lambda id: context.config. set_pending_project_stack_id(id), capabilities=capabilities, timeout_in_minutes=30, tags=[{ 'Key': constant.PROJECT_NAME_TAG, 'Value': args.stack_name }], parameters=parameters) # Create initial project settings. context.config.init_project_settings() # Temporarily set the config's project_stack_id property to the pending stack # id so the project uploader can find it later. # context.config.project_stack_id = context.config.get_pending_project_stack_id() # Do the initial update... __update_project_stack(context, pending_resource_status, capabilities, args)