depot/third_party/copybara/javatests/com/google/copybara/ReadConfigFromChangeWorkflowTest.java
Default email dfee7b6196 Project import generated by Copybara.
GitOrigin-RevId: b578e69f18a543889ded9c57a8f0dffacdb103d8
2020-05-15 16:19:19 -04:00

118 lines
4.6 KiB
Java

/*
* Copyright (C) 2018 Google Inc.
*
* 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.copybara;
import static com.google.common.truth.Truth.assertThat;
import com.google.common.collect.ImmutableList;
import com.google.copybara.config.Config;
import com.google.copybara.config.ConfigValidator;
import com.google.copybara.config.ValidationResult;
import com.google.copybara.exception.ValidationException;
import com.google.copybara.testing.DummyOrigin;
import com.google.copybara.testing.OptionsBuilder;
import com.google.copybara.testing.RecordsProcessCallDestination;
import com.google.copybara.testing.SkylarkTestExecutor;
import com.google.copybara.util.console.Console;
import com.google.copybara.util.console.StarlarkMode;
import java.io.IOException;
import java.nio.file.Files;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
@RunWith(JUnit4.class)
public class ReadConfigFromChangeWorkflowTest {
private OptionsBuilder options;
private DummyOrigin origin;
private RecordsProcessCallDestination destination;
private SkylarkTestExecutor skylark;
@Before
public void setup() {
options = new OptionsBuilder();
origin = new DummyOrigin();
destination = new RecordsProcessCallDestination();
options.testingOptions.origin = origin;
options.testingOptions.destination = destination;
options.general.starlarkMode = StarlarkMode.STRICT.name();
skylark = new SkylarkTestExecutor(options);
}
/**
* A test that check that we can mutate the glob in iterative mode
*/
@SuppressWarnings("unchecked")
@Test
public void testWriterStateMaintained() throws Exception {
options.workflowOptions.lastRevision = "0";
String configCode = mutatingWorkflow("*");
Config cfg = skylark.loadConfig(configCode);
ConfigLoader constantConfigLoader =
new ConfigLoader(
skylark.createModuleSet(),
skylark.createConfigFile("copy.bara.sky", configCode),
options.general.getStarlarkMode()) {
@Override
protected Config doLoadForRevision(Console console, Revision revision)
throws ValidationException {
try {
return skylark.loadConfig(mutatingWorkflow(revision.asString()));
} catch (IOException e) {
throw new AssertionError("Should not fail", e);
}
}
};
ReadConfigFromChangeWorkflow<?, ?> wf = new ReadConfigFromChangeWorkflow<>(
(Workflow) cfg.getMigration("default"),
options.build(),
constantConfigLoader, new ConfigValidator() {
@Override
public ValidationResult validate(Config config, String migrationName) {
return ValidationResult.EMPTY;
}
});
origin.singleFileChange(0, "base", "fileB", "b");
origin.singleFileChange(1, "one", "file1", "b");
origin.singleFileChange(2, "two", "file2", "b");
origin.singleFileChange(3, "three", "file3", "b");
wf.run(Files.createTempDirectory("workdir"), ImmutableList.of("3"));
assertThat(destination.processed).hasSize(3);
assertThat(destination.processed.get(0).getDestinationFiles().toString()).contains("file1");
assertThat(destination.processed.get(0).getWorkdir()).containsExactly("file1", "b");
assertThat(destination.processed.get(1).getDestinationFiles().toString()).contains("file2");
assertThat(destination.processed.get(1).getWorkdir()).containsExactly("file2", "b");
assertThat(destination.processed.get(2).getDestinationFiles().toString()).contains("file3");
assertThat(destination.processed.get(2).getWorkdir()).containsExactly("file3", "b");
}
private String mutatingWorkflow(String suffix) {
return "core.workflow("
+ " name = 'default',"
+ " origin = testing.origin(),"
+ " mode = 'ITERATIVE',"
+ " origin_files = glob(['file" + suffix + "']),"
+ " destination_files = glob(['file" + suffix + "']),"
+ " destination = testing.destination(),"
+ " authoring = authoring.pass_thru('foo <foo@foo.com>')"
+ ")";
}
}