blob: 3628540d0117b84133c5e3afde3e4e832b41bb1f [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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.
import os
import pathlib
import shutil
import pytest
from api.v1.api_pb2 import Sdk, SDK_JAVA, SDK_GO, STATUS_UNSPECIFIED, \
PRECOMPILED_OBJECT_TYPE_UNIT_TEST
from cd_helper import CDHelper
from config import Config
from helper import Example, Tag
@pytest.fixture
def delete_temp_folder():
"""
Create temp folder for tests with storing files
"""
yield delete_temp_folder
if os.path.exists(Config.TEMP_FOLDER):
shutil.rmtree(Config.TEMP_FOLDER)
@pytest.fixture
def upload_blob():
"""
Fake method for mocking
Returns: None
"""
pass
def test__get_gcs_object_name():
"""
Test getting the path where file will be stored at the bucket
"""
expected_path = "SDK_JAVA/PRECOMPILED_OBJECT_TYPE_UNIT_TEST/base_folder"
expected_result = "%s/%s" % (expected_path, "file.java")
expected_result_with_extension = "%s/%s" % (expected_path, "file.output")
assert CDHelper()._get_gcs_object_name(
SDK_JAVA, PRECOMPILED_OBJECT_TYPE_UNIT_TEST, "base_folder",
"file") == expected_result
assert CDHelper()._get_gcs_object_name(
SDK_JAVA,
PRECOMPILED_OBJECT_TYPE_UNIT_TEST,
"base_folder",
"file",
"output") == expected_result_with_extension
def test__write_to_local_fs(delete_temp_folder):
"""
Test writing code of an example, output and meta info to
the filesystem (in temp folder)
Args:
delete_temp_folder: python fixture to clean up temp folder
after method execution
"""
object_meta = {
"name": "name",
"description": "description",
"multifile": False,
"categories": ["category-1", "category-2"],
"pipeline_options": "--option option"
}
example = Example(
name="name",
pipeline_id="pipeline_id",
sdk=SDK_JAVA,
filepath="filepath",
code="code_of_example",
output="output_of_example",
status=STATUS_UNSPECIFIED,
tag=Tag(**object_meta),
link="link")
result_filepath = "SDK_JAVA/PRECOMPILED_OBJECT_TYPE_UNSPECIFIED/name"
expected_result = {
"%s/%s" % (result_filepath, "name.java"): "%s/%s/%s" %
("temp/pipeline_id", result_filepath, "name.java"),
"%s/%s" % (result_filepath, "name.output"): "%s/%s/%s" %
("temp/pipeline_id", result_filepath, "name.output"),
"%s/%s" % (result_filepath, "name.log"): "%s/%s/%s" %
("temp/pipeline_id", result_filepath, "name.log"),
"%s/%s" % (result_filepath, "name.graph"): "%s/%s/%s" %
("temp/pipeline_id", result_filepath, "name.graph"),
"%s/%s" % (result_filepath, "meta.info"): "%s/%s/%s" %
("temp/pipeline_id", result_filepath, "meta.info"),
}
assert CDHelper()._write_to_local_fs(example) == expected_result
def test__save_to_cloud_storage(mocker):
"""
Test saving examples, outputs and meta to bucket
Args:
mocker: mocker fixture from pytest-mocker
"""
upload_blob_mock = mocker.patch(
"cd_helper.CDHelper._upload_blob", return_value=upload_blob)
write_to_os_mock = mocker.patch(
"cd_helper.CDHelper._write_to_local_fs", return_value={"": ""})
example = Example(
name="name",
pipeline_id="pipeline_id",
sdk=SDK_JAVA,
filepath="filepath",
code="code_of_example",
output="output_of_example",
status=STATUS_UNSPECIFIED,
tag=None,
link="link")
CDHelper()._save_to_cloud_storage([example])
write_to_os_mock.assert_called_with(example)
upload_blob_mock.assert_called_with(source_file="", destination_blob_name="")
def test__write_default_example_path_to_local_fs(delete_temp_folder):
"""
Test writing default example link of sdk to
the filesystem (in temp folder)
Args:
delete_temp_folder: python fixture to clean up temp folder
after method execution
"""
sdk = Sdk.Name(SDK_GO)
default_example_path = "SDK_GO/PRECOMPILED_OBJECT_TYPE_EXAMPLE/WordCount"
expected_result = str(pathlib.Path(sdk, Config.DEFAULT_PRECOMPILED_OBJECT))
cloud_path = CDHelper()._write_default_example_path_to_local_fs(
default_example_path)
assert cloud_path == expected_result
assert os.path.exists(os.path.join("temp", cloud_path))