diff --git a/runners/prism/java/src/main/java/org/apache/beam/runners/prism/PrismRunnerRegistrar.java b/runners/prism/java/src/main/java/org/apache/beam/runners/prism/PrismRegistrar.java similarity index 50% rename from runners/prism/java/src/main/java/org/apache/beam/runners/prism/PrismRunnerRegistrar.java rename to runners/prism/java/src/main/java/org/apache/beam/runners/prism/PrismRegistrar.java index ff7b73ab6db0..13b7d74fb6ac 100644 --- a/runners/prism/java/src/main/java/org/apache/beam/runners/prism/PrismRunnerRegistrar.java +++ b/runners/prism/java/src/main/java/org/apache/beam/runners/prism/PrismRegistrar.java @@ -19,17 +19,35 @@ import com.google.auto.service.AutoService; import org.apache.beam.sdk.PipelineRunner; +import org.apache.beam.sdk.options.PipelineOptions; +import org.apache.beam.sdk.options.PipelineOptionsRegistrar; import org.apache.beam.sdk.runners.PipelineRunnerRegistrar; import org.apache.beam.vendor.guava.v32_1_2_jre.com.google.common.collect.ImmutableList; /** - * Registers {@link PrismRunner} and {@link TestPrismRunner} with {@link PipelineRunnerRegistrar}. + * Contains the {@link PipelineRunnerRegistrar} and {@link PipelineOptionsRegistrar} for the {@link + * PrismRunner}. */ -@AutoService(PipelineRunnerRegistrar.class) -public class PrismRunnerRegistrar implements PipelineRunnerRegistrar { +public class PrismRegistrar { + private PrismRegistrar() {} + /** + * Registers {@link PrismRunner} and {@link TestPrismRunner} with {@link PipelineRunnerRegistrar}. + */ + @AutoService(PipelineRunnerRegistrar.class) + public static class Runner implements PipelineRunnerRegistrar { - @Override - public Iterable>> getPipelineRunners() { - return ImmutableList.of(PrismRunner.class, TestPrismRunner.class); + @Override + public Iterable>> getPipelineRunners() { + return ImmutableList.of(PrismRunner.class, TestPrismRunner.class); + } + } + + /** Registers the {@link PrismPipelineOptions} and {@link TestPrismPipelineOptions}. */ + @AutoService(PipelineOptionsRegistrar.class) + public static class Options implements PipelineOptionsRegistrar { + @Override + public Iterable> getPipelineOptions() { + return ImmutableList.of(PrismPipelineOptions.class, TestPrismPipelineOptions.class); + } } } diff --git a/runners/prism/java/src/test/java/org/apache/beam/runners/prism/PrismRegistrarTest.java b/runners/prism/java/src/test/java/org/apache/beam/runners/prism/PrismRegistrarTest.java new file mode 100644 index 000000000000..4ed69b14edf8 --- /dev/null +++ b/runners/prism/java/src/test/java/org/apache/beam/runners/prism/PrismRegistrarTest.java @@ -0,0 +1,72 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 org.apache.beam.runners.prism; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + +import java.util.ServiceLoader; +import org.apache.beam.runners.prism.PrismRegistrar.Options; +import org.apache.beam.runners.prism.PrismRegistrar.Runner; +import org.apache.beam.sdk.options.PipelineOptionsRegistrar; +import org.apache.beam.sdk.runners.PipelineRunnerRegistrar; +import org.apache.beam.vendor.guava.v32_1_2_jre.com.google.common.collect.ImmutableList; +import org.apache.beam.vendor.guava.v32_1_2_jre.com.google.common.collect.Lists; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +/** Tests for {@link PrismRegistrar}. */ +@RunWith(JUnit4.class) +public class PrismRegistrarTest { + @Test + public void testCorrectOptionsAreReturned() { + assertEquals( + ImmutableList.of(PrismPipelineOptions.class, TestPrismPipelineOptions.class), + new Options().getPipelineOptions()); + } + + @Test + public void testCorrectRunnersAreReturned() { + assertEquals( + ImmutableList.of(PrismRunner.class, TestPrismRunner.class), + new Runner().getPipelineRunners()); + } + + @Test + public void testServiceLoaderForOptions() { + for (PipelineOptionsRegistrar registrar : + Lists.newArrayList(ServiceLoader.load(PipelineOptionsRegistrar.class).iterator())) { + if (registrar instanceof Options) { + return; + } + } + fail("Expected to find " + Options.class); + } + + @Test + public void testServiceLoaderForRunner() { + for (PipelineRunnerRegistrar registrar : + Lists.newArrayList(ServiceLoader.load(PipelineRunnerRegistrar.class).iterator())) { + if (registrar instanceof Runner) { + return; + } + } + fail("Expected to find " + Runner.class); + } +}