use of io.cdap.cdap.app.MockAppConfigurer in project cdap by caskdata.
the class IntegrationTestManager method deployApplication.
@Override
@SuppressWarnings("unchecked")
public ApplicationManager deployApplication(NamespaceId namespace, Class<? extends Application> applicationClz, @Nullable Config configObject, File... bundleEmbeddedJars) {
// See if the application class comes from file or jar.
// If it's from JAR, no need to trace dependency since it should already be in an application jar.
URL appClassURL = applicationClz.getClassLoader().getResource(applicationClz.getName().replace('.', '/') + ".class");
// Should never happen, otherwise the ClassLoader is broken
Preconditions.checkNotNull(appClassURL, "Cannot find class %s from the classloader", applicationClz);
String appConfig = "";
Type configType = Artifacts.getConfigType(applicationClz);
RemoteApplicationManager manager;
try {
if (configObject != null) {
appConfig = GSON.toJson(configObject);
} else {
configObject = (Config) TypeToken.of(configType).getRawType().newInstance();
}
// Create and deploy application jar
File appJarFile = new File(tmpFolder, String.format("%s-%s.jar", applicationClz.getSimpleName(), VERSION));
try {
if ("jar".equals(appClassURL.getProtocol())) {
copyJarFile(appClassURL, appJarFile);
} else {
Manifest manifest = new Manifest();
manifest.getMainAttributes().put(ManifestFields.BUNDLE_VERSION, VERSION);
Location appJar = AppJarHelper.createDeploymentJar(locationFactory, applicationClz, manifest, CLASS_ACCEPTOR, bundleEmbeddedJars);
try (InputStream input = appJar.getInputStream()) {
Files.copy(input, appJarFile.toPath());
}
}
// Extracts application id from the application class
Application application = applicationClz.newInstance();
MockAppConfigurer configurer = new MockAppConfigurer(application);
application.configure(configurer, new DefaultApplicationContext<>(configObject));
String applicationId = configurer.getName();
// Upload artifact for application
ContentProvider<InputStream> artifactStream = locationFactory.create(appJarFile.toURI())::getInputStream;
artifactClient.add(namespace, applicationClz.getSimpleName(), artifactStream, VERSION);
List<ArtifactSummary> deployedArtifacts = artifactClient.list(namespace);
assert deployedArtifacts.size() > 0;
// Deploy application
ArtifactSummary summary = new ArtifactSummary(applicationClz.getSimpleName(), VERSION);
AppRequest<?> request = new AppRequest<>(summary, appConfig);
ApplicationId id = namespace.app(applicationId);
applicationClient.deploy(id, request);
manager = new RemoteApplicationManager(namespace.app(applicationId), clientConfig, restClient);
} finally {
if (!appJarFile.delete()) {
LOG.warn("Failed to delete temporary app jar {}", appJarFile.getAbsolutePath());
}
}
return manager;
} catch (Exception e) {
throw Throwables.propagate(e);
}
}
use of io.cdap.cdap.app.MockAppConfigurer in project cdap by caskdata.
the class UnitTestManager method deployApplication.
@Override
public ApplicationManager deployApplication(NamespaceId namespace, Class<? extends Application> applicationClz, @Nullable Config configObject, File... bundleEmbeddedJars) throws AccessException {
Preconditions.checkNotNull(applicationClz, "Application class cannot be null.");
Type configType = Artifacts.getConfigType(applicationClz);
try {
ArtifactId artifactId = new ArtifactId(namespace.getNamespace(), applicationClz.getSimpleName(), "1.0-SNAPSHOT");
addAppArtifact(artifactId, applicationClz, new Manifest(), bundleEmbeddedJars);
if (configObject == null) {
configObject = (Config) TypeToken.of(configType).getRawType().newInstance();
}
Application app = applicationClz.newInstance();
MockAppConfigurer configurer = new MockAppConfigurer(app);
app.configure(configurer, new DefaultApplicationContext<>(configObject));
ApplicationId applicationId = new ApplicationId(namespace.getNamespace(), configurer.getName());
ArtifactSummary artifactSummary = new ArtifactSummary(artifactId.getArtifact(), artifactId.getVersion());
appFabricClient.deployApplication(Id.Application.fromEntityId(applicationId), new AppRequest(artifactSummary, configObject));
return appManagerFactory.create(applicationId);
} catch (AccessException e) {
throw e;
} catch (Exception e) {
throw Throwables.propagate(e);
}
}
Aggregations