# Copyright 2020 Huawei Technologies Co., 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 SourceFile class.""" import os import shutil import stat import tempfile import pytest from mindinsight.wizard.base.source_file import SourceFile from tests.ut.wizard.utils import generate_file class TestSourceFile: """Test SourceFile""" def setup_method(self): """Setup before call test method.""" self._input_dir = tempfile.mkdtemp() self._output_dir = tempfile.mkdtemp() def teardown_method(self): """Tear down after call test method.""" self._remove_dirs() self._input_dir = None self._output_dir = None def _remove_dirs(self): """Recursively delete a directory tree.""" for temp_dir in [self._input_dir, self._output_dir]: if temp_dir and os.path.exists(temp_dir): shutil.rmtree(temp_dir) @staticmethod def _generate_file(file, stat_mode): """Create a file and write content.""" generate_file(file, "template file.", stat_mode) @pytest.mark.parametrize('params', [{ 'file_relative_path': 'src/config.py', 'template_file_path': 'src/config.py-tpl' }, { 'file_relative_path': 'src/lenet.py', 'template_file_path': 'src/lenet.py-tpl' }, { 'file_relative_path': 'README.md', 'template_file_path': 'README.md-tpl' }, { 'file_relative_path': 'train.py', 'template_file_path': 'train.py-tpl' }]) def test_write_py(self, params): """Test write python script file""" source_file = SourceFile() source_file.file_relative_path = params['file_relative_path'] source_file.template_file_path = os.path.join(self._input_dir, params['template_file_path']) self._generate_file(source_file.template_file_path, stat.S_IRUSR) # start write source_file.write(self._output_dir) output_file_path = os.path.join(self._output_dir, source_file.file_relative_path) assert os.access(output_file_path, os.F_OK | os.R_OK | os.W_OK) assert stat.filemode(os.stat(output_file_path).st_mode) == '-rw-------' @pytest.mark.parametrize('params', [{ 'file_relative_path': 'scripts/run_eval.sh', 'template_file_path': 'scripts/run_eval.sh-tpl' }, { 'file_relative_path': 'run_distribute_train.sh', 'template_file_path': 'run_distribute_train.sh-tpl' }]) def test_write_sh(self, params): """Test write shell script file""" source_file = SourceFile() source_file.file_relative_path = params['file_relative_path'] source_file.template_file_path = os.path.join(self._input_dir, params['template_file_path']) self._generate_file(source_file.template_file_path, stat.S_IRUSR) # start write source_file.write(self._output_dir) output_file_path = os.path.join(self._output_dir, source_file.file_relative_path) assert os.access(output_file_path, os.F_OK | os.R_OK | os.W_OK | os.X_OK) assert stat.filemode(os.stat(output_file_path).st_mode) == '-rwx------'