/*
* Copyright 2017 LinkedIn Corp.
*
* 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.
*
*/package azkaban.project;
importstatic azkaban.Constants.ConfigurationKeys.PROJECT_TEMP_DIR;
importstatic java.util.Objects.requireNonNull;
importstatic org.mockito.Mockito.mock;
importstatic org.mockito.Mockito.verify;
importstatic org.mockito.Mockito.when;
import azkaban.project.validator.ValidationReport;
import azkaban.project.validator.ValidationStatus;
import azkaban.storage.StorageManager;
import azkaban.user.User;
import azkaban.utils.Props;
import java.io.File;
import java.net.URL;
import java.util.Map;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
publicclassAzkabanProjectLoaderTest{
privatestaticfinal String DIRECTORY_FLOW_REPORT_KEY = "Directory Flow";
@Rulepublicfinal TemporaryFolder TEMP_DIR = new TemporaryFolder();
privatefinalint ID = 107;
privatefinalint VERSION = 10;
privatefinal Project project = new Project(this.ID, "project1");
private AzkabanProjectLoader azkabanProjectLoader;
private StorageManager storageManager;
private ProjectLoader projectLoader;
@BeforepublicvoidsetUp()throws Exception {
final Props props = new Props();
props.put(PROJECT_TEMP_DIR, this.TEMP_DIR.getRoot().getAbsolutePath());
this.storageManager = mock(StorageManager.class);
this.projectLoader = mock(ProjectLoader.class);
this.azkabanProjectLoader = new AzkabanProjectLoader(props, this.projectLoader,
this.storageManager, new FlowLoaderFactory(props));
}
@TestpublicvoiduploadProject()throws Exception {
when(this.projectLoader.getLatestProjectVersion(this.project)).thenReturn(this.VERSION);
final URL resource = requireNonNull(
getClass().getClassLoader().getResource("sample_flow_01.zip"));
final File projectZipFile = new File(resource.getPath());
final User uploader = new User("test_user");
final Map<String, ValidationReport> validationReportMap =
this.azkabanProjectLoader
.uploadProject(this.project, projectZipFile, "zip", uploader, null);
Assert.assertEquals(1, validationReportMap.size());
Assert.assertTrue(validationReportMap.containsKey(DIRECTORY_FLOW_REPORT_KEY));
Assert.assertEquals(ValidationStatus.PASS,
validationReportMap.get(DIRECTORY_FLOW_REPORT_KEY).getStatus());
verify(this.storageManager)
.uploadProject(this.project, this.VERSION + 1, projectZipFile, uploader);
}
@TestpublicvoidgetProjectFile()throws Exception {
when(this.projectLoader.getLatestProjectVersion(this.project)).thenReturn(this.VERSION);
// Run the codethis.azkabanProjectLoader.getProjectFile(this.project, -1);
verify(this.projectLoader).getLatestProjectVersion(this.project);
verify(this.storageManager).getProjectFile(this.ID, this.VERSION);
}
}