javatests/com/google/cloud/deploymentmanager/autogen/AutogenMediumTestsSuite.java (113 lines of code) (raw):
// Copyright 2018 Google LLC
//
// 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.google.cloud.deploymentmanager.autogen;
import static com.google.common.collect.Streams.stream;
import static java.nio.charset.StandardCharsets.UTF_8;
import static java.util.stream.Collectors.toList;
import com.google.cloud.deploymentmanager.autogen.Autogen.SharedSupportFilesStrategy;
import com.google.cloud.deploymentmanager.autogen.proto.DeploymentPackageAutogenSpec.DeploymentTool;
import com.google.cloud.deploymentmanager.autogen.proto.DeploymentPackageInput;
import com.google.cloud.deploymentmanager.autogen.proto.SolutionPackage;
import com.google.common.base.Supplier;
import com.google.common.base.Suppliers;
import com.google.common.io.Files;
import com.google.inject.Guice;
import com.google.protobuf.TextFormat;
import java.io.File;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.stream.Stream;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
@RunWith(Suite.class)
@SuiteClasses({VerifySolutionFileSetTest.class, VerifyAutogenFileContent.class})
public class AutogenMediumTestsSuite {
static final String RELATIVE_TESTDATA_PATH =
"javatests/com/google/cloud/deploymentmanager/autogen/testdata/";
static final Path TESTDATA_PATH =
Path.of(
System.getenv("TEST_SRCDIR"),
System.getenv("TEST_WORKSPACE"),
RELATIVE_TESTDATA_PATH);
static final File ROOT = TESTDATA_PATH.toFile();
static final Autogen AUTOGEN =
Guice.createInjector(Autogen.getAutogenModule()).getInstance(Autogen.class);
static class Solution {
final String name;
final File solutionFolder;
final File goldenFolder;
final Supplier<SolutionPackage> solutionPackage;
static Collection<String[]> allSolutionsActualFilesDesc() {
List<String[]> files = new ArrayList<>();
for (Solution solution : findAllSolutions()) {
for (SolutionPackage.File f : solution.solutionPackage.get().getFilesList()) {
files.add(
new String[] {
solution.name, solution.goldenFolder.getPath(), f.getPath(), f.getContent()
});
}
}
return files;
}
/** Finds all solutions under testdata folder. */
static Collection<Solution> findAllSolutions() {
return stream(Files.fileTraverser().depthFirstPreOrder(ROOT))
.filter(Files.isFile())
.filter(f -> f.getName().matches("input.*\\.prototext"))
.flatMap(Solution::getSolutions)
.collect(toList());
}
static Stream<Solution> getSolutions(File inputSpecFile) {
File solutionFolder = inputSpecFile.getParentFile();
File dmGoldenFolder = new File(solutionFolder, "dm");
File terraformGoldenFolder = new File(solutionFolder, "tf");
if (!dmGoldenFolder.exists() && !terraformGoldenFolder.exists()) {
throw new IllegalStateException(
"No golden folder exists for either Deployment Manager or Terraform");
}
List<Solution> solutions = new ArrayList<>();
if (dmGoldenFolder.exists()) {
solutions.add(
new Solution(
inputSpecFile, solutionFolder, dmGoldenFolder, DeploymentTool.DEPLOYMENT_MANAGER));
}
if (terraformGoldenFolder.exists()) {
solutions.add(
new Solution(
inputSpecFile, solutionFolder, terraformGoldenFolder, DeploymentTool.TERRAFORM));
}
return solutions.stream();
}
Solution(File inputSpecFile, File solutionFolder, File goldenFolder, DeploymentTool tool) {
this.name = relativePathFunction(ROOT, inputSpecFile);
this.solutionFolder = solutionFolder;
this.goldenFolder = goldenFolder;
this.solutionPackage =
Suppliers.memoize(
() -> {
try {
DeploymentPackageInput.Builder input = DeploymentPackageInput.newBuilder();
TextFormat.getParser()
.merge(Files.asCharSource(inputSpecFile, UTF_8).read(), input);
input.getSpecBuilder().setDeploymentTool(tool);
return AUTOGEN.generateDeploymentPackage(
input.build(), SharedSupportFilesStrategy.INCLUDED);
} catch (IOException e) {
throw new RuntimeException(e);
}
});
}
@Override
public String toString() {
return String.format(
"Input spec: %s, golden: %s", this.name, relativePathFunction(ROOT, goldenFolder));
}
}
public static String relativePathFunction(File parent, File f) {
Path parentPath = Paths.get(parent.getAbsolutePath()).normalize();
Path filePath = Paths.get(f.getAbsolutePath()).normalize();
return parentPath.relativize(filePath).toString();
}
}