/* * The Alluxio Open Foundation licenses this work under the Apache License, version 2.0 * (the "License"). You may not use this work except in compliance with the License, which is * available at www.apache.org/licenses/LICENSE-2.0 * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, * either express or implied, as more fully set forth in the License. * * See the NOTICE file distributed with this work for information regarding copyright ownership. */ package alluxio.master.lineage; import alluxio.AlluxioURI; import alluxio.Constants; import alluxio.LocalAlluxioClusterResource.Config; import alluxio.PropertyKey; import alluxio.client.file.FileSystemContext; import alluxio.client.lineage.LineageContext; import alluxio.client.lineage.LineageFileSystem; import alluxio.job.CommandLineJob; import alluxio.job.JobConf; import alluxio.master.MasterProcess; import alluxio.rest.RestApiTest; import alluxio.rest.TestCase; import alluxio.wire.LineageInfo; import alluxio.wire.TtlAction; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.ws.rs.HttpMethod; /** * Test cases for {@link LineageMasterClientRestServiceHandler}. */ public final class LineageMasterClientRestApiTest extends RestApiTest { private MasterProcess mMasterProcess; private LineageFileSystem mLineageClient; @Before public void before() throws Exception { mHostname = mResource.get().getHostname(); mPort = mResource.get().getLocalAlluxioMaster().getMasterProcess().getWebAddress().getPort(); mServicePrefix = LineageMasterClientRestServiceHandler.SERVICE_PREFIX; mLineageClient = LineageFileSystem.get(FileSystemContext.INSTANCE, LineageContext.INSTANCE); mMasterProcess = mResource.get().getLocalAlluxioMaster().getMasterProcess(); } @Test @Config(confParams = {PropertyKey.Name.USER_LINEAGE_ENABLED, "true"}) public void serviceName() throws Exception { new TestCase(mHostname, mPort, getEndpoint(LineageMasterClientRestServiceHandler.SERVICE_NAME), NO_PARAMS, HttpMethod.GET, Constants.LINEAGE_MASTER_CLIENT_SERVICE_NAME).run(); } @Test @Config(confParams = {PropertyKey.Name.USER_LINEAGE_ENABLED, "true"}) public void serviceVersion() throws Exception { new TestCase(mHostname, mPort, getEndpoint(LineageMasterClientRestServiceHandler.SERVICE_VERSION), NO_PARAMS, HttpMethod.GET, Constants.LINEAGE_MASTER_CLIENT_SERVICE_VERSION).run(); } @Test @Config(confParams = {PropertyKey.Name.USER_LINEAGE_ENABLED, "true"}) public void createLineage() throws Exception { mLineageClient.createFile(new AlluxioURI("/input")).close(); Map<String, String> params = new HashMap<>(); params.put("inputFiles", "/input"); params.put("outputFiles", "/output"); params.put("command", "test"); params.put("commandOutputFile", "test"); new TestCase(mHostname, mPort, getEndpoint(LineageMasterClientRestServiceHandler.CREATE_LINEAGE), params, HttpMethod.POST, null).call(); } @Test @Config(confParams = {PropertyKey.Name.USER_LINEAGE_ENABLED, "true"}) public void deleteLineage() throws Exception { LineageMaster lineageMaster = mMasterProcess.getMaster(LineageMaster.class); long lineageId = lineageMaster.createLineage(new ArrayList<AlluxioURI>(), new ArrayList<AlluxioURI>(), new CommandLineJob("test", new JobConf("/output"))); Map<String, String> params = new HashMap<>(); params.put("lineageId", Long.toString(lineageId)); params.put("cascade", "false"); new TestCase(mHostname, mPort, getEndpoint(LineageMasterClientRestServiceHandler.DELETE_LINEAGE), params, HttpMethod.POST, true).run(); } @Test @Config(confParams = {PropertyKey.Name.USER_LINEAGE_ENABLED, "true"}) public void getLineageInfoList() throws Exception { AlluxioURI input = new AlluxioURI("/input"); AlluxioURI output = new AlluxioURI("/output"); LineageMaster lineageMaster = mMasterProcess.getMaster(LineageMaster.class); mLineageClient.createFile(new AlluxioURI("/input")).close(); long lineageId = lineageMaster.createLineage(Lists.newArrayList(input), Lists.newArrayList(output), new CommandLineJob("test", new JobConf(output.getPath()))); String result = new TestCase(mHostname, mPort, getEndpoint(LineageMasterClientRestServiceHandler.GET_LINEAGE_INFO_LIST), NO_PARAMS, HttpMethod.GET, null).call(); List<LineageInfo> lineageInfos = new ObjectMapper().readValue(result, new TypeReference<List<LineageInfo>>() {}); LineageInfo lineageInfo = Iterables.getOnlyElement(lineageInfos); Assert.assertEquals(ImmutableList.of(input.toString()), lineageInfo.getInputFiles()); Assert.assertEquals(ImmutableList.of(output.toString()), lineageInfo.getOutputFiles()); Assert.assertEquals(lineageId, lineageInfo.getId()); } @Test @Config(confParams = {PropertyKey.Name.USER_LINEAGE_ENABLED, "true"}) public void reinitializeFile() throws Exception { mLineageClient.createFile(new AlluxioURI("/test")).close(); Map<String, String> params = new HashMap<>(); params.put("path", "/test"); params.put("blockSizeBytes", "1"); params.put("ttl", "1"); params.put("ttlAction", TtlAction.DELETE.toString()); new TestCase(mHostname, mPort, getEndpoint(LineageMasterClientRestServiceHandler.REINITIALIZE_FILE), params, HttpMethod.POST, null).call(); } @Test @Config(confParams = {PropertyKey.Name.USER_LINEAGE_ENABLED, "true"}) public void reportLostFile() throws Exception { mLineageClient.createFile(new AlluxioURI("/test")).close(); Map<String, String> params = new HashMap<>(); params.put("path", "/test"); new TestCase(mHostname, mPort, getEndpoint(LineageMasterClientRestServiceHandler.REPORT_LOST_FILE), params, HttpMethod.POST, null).run(); } }