/* * Copyright 2015 the original author or authors. * * 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 com.amazonaws.devicefarm; import com.amazonaws.devicefarm.extension.DeviceFarmExtension; import com.amazonaws.services.devicefarm.AWSDeviceFarmClient; import com.amazonaws.services.devicefarm.model.*; import com.android.build.gradle.AppExtension; import mockit.Expectations; import mockit.Injectable; import mockit.Verifications; import org.gradle.api.Project; import org.gradle.testfixtures.ProjectBuilder; import org.gradle.api.logging.Logger; import org.testng.annotations.Test; import java.io.File; import java.io.IOException; import java.util.Arrays; import static org.testng.Assert.assertEquals; import static org.testng.AssertJUnit.assertNotNull; import static org.testng.AssertJUnit.assertTrue; public class DeviceFarmPluginTest { @Injectable AWSDeviceFarmClient apiMock; @Injectable DeviceFarmUploader uploaderMock; @Injectable Logger loggerMock; Project gradleProject = ProjectBuilder.builder().build(); @Test public void deviceFarmPluginAddsTestServerToProject() { gradleProject.getPluginManager().apply("com.android.application"); gradleProject.getPluginManager().apply("devicefarm"); assertTrue(((AppExtension) gradleProject.getExtensions().findByName("android")).getTestServers().get(0) instanceof DeviceFarmServer); } @Test public void instrumentationTest(@Injectable File testPackage, @Injectable File testedApp) throws IOException { final ListProjectsResult projectList = new ListProjectsResult(); final com.amazonaws.services.devicefarm.model.Project myProject = new com.amazonaws.services.devicefarm.model.Project() .withName("MyProject") .withArn("1234"); projectList.setProjects(Arrays.asList(myProject)); final ListDevicePoolsResult devicePoolList = new ListDevicePoolsResult(); devicePoolList.setDevicePools(Arrays.asList(new DevicePool().withName("Top Devices").withArn("1234"))); DeviceFarmExtension extension = new DeviceFarmExtension(gradleProject); extension.setProjectName("MyProject"); DeviceFarmServer server = new DeviceFarmServer(extension, loggerMock, apiMock, uploaderMock, new DeviceFarmUtils(apiMock, extension)); final ScheduleRunResult runResult = new ScheduleRunResult(); runResult.setRun(new Run()); runResult.getRun().setArn("arn:1:2:3:4:5:runarn/projarn"); new Expectations() {{ apiMock.listProjects(new ListProjectsRequest()); result = projectList; apiMock.listDevicePools(new ListDevicePoolsRequest().withArn("1234")); result = devicePoolList; uploaderMock.upload((File) any, myProject, UploadType.INSTRUMENTATION_TEST_PACKAGE); result = new Upload().withArn("arn:instrumentation/test/pkg"); uploaderMock.upload((File) any, myProject, UploadType.ANDROID_APP); result = new Upload().withArn("arn:android/app"); apiMock.scheduleRun((ScheduleRunRequest) any); result = runResult; }}; server.uploadApks("debug", testPackage, testedApp); new Verifications() {{ ScheduleRunRequest runRequest = null; apiMock.scheduleRun(runRequest = withCapture()); assertNotNull(runRequest); assertEquals(runRequest.getTest().getType(), TestType.INSTRUMENTATION.toString()); }}; } }