| /* |
| * 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.core.construction; |
| |
| import static org.hamcrest.Matchers.equalTo; |
| import static org.hamcrest.Matchers.startsWith; |
| import static org.junit.Assert.assertThat; |
| import static org.junit.Assert.fail; |
| |
| import java.util.Optional; |
| import org.apache.beam.model.pipeline.v1.RunnerApi; |
| import org.apache.beam.vendor.guava.v26_0_jre.com.google.common.collect.ImmutableList; |
| import org.junit.Test; |
| import org.junit.runner.RunWith; |
| import org.junit.runners.JUnit4; |
| |
| @RunWith(JUnit4.class) |
| @SuppressWarnings({ |
| "nullness" // TODO(https://issues.apache.org/jira/browse/BEAM-10402) |
| }) |
| public class DefaultArtifactResolverTest { |
| private RunnerApi.Pipeline createEmptyPipeline( |
| Iterable<RunnerApi.ArtifactInformation> dependencies) { |
| return RunnerApi.Pipeline.newBuilder() |
| .setComponents( |
| RunnerApi.Components.newBuilder() |
| .putEnvironments( |
| "env", |
| RunnerApi.Environment.newBuilder().addAllDependencies(dependencies).build())) |
| .build(); |
| } |
| |
| // Testing artifacts |
| private RunnerApi.ArtifactInformation fooMavenArtifact = |
| RunnerApi.ArtifactInformation.newBuilder() |
| .setTypeUrn(BeamUrns.getUrn(RunnerApi.StandardArtifacts.Types.MAVEN)) |
| .setTypePayload( |
| RunnerApi.MavenPayload.newBuilder() |
| .setArtifact("org.apache:foo:1.0") |
| .build() |
| .toByteString()) |
| .build(); |
| |
| private RunnerApi.ArtifactInformation fooFileArtifact = |
| RunnerApi.ArtifactInformation.newBuilder() |
| .setTypeUrn(BeamUrns.getUrn(RunnerApi.StandardArtifacts.Types.FILE)) |
| .setTypePayload( |
| RunnerApi.ArtifactFilePayload.newBuilder().setPath("foo.jar").build().toByteString()) |
| .build(); |
| |
| private RunnerApi.ArtifactInformation barFileArtifact = |
| RunnerApi.ArtifactInformation.newBuilder() |
| .setTypeUrn(BeamUrns.getUrn(RunnerApi.StandardArtifacts.Types.FILE)) |
| .setTypePayload( |
| RunnerApi.ArtifactFilePayload.newBuilder().setPath("bar.jar").build().toByteString()) |
| .build(); |
| |
| private RunnerApi.ArtifactInformation ambientArtifact = |
| RunnerApi.ArtifactInformation.newBuilder() |
| .setTypeUrn(BeamUrns.getUrn(RunnerApi.StandardArtifacts.Types.DEFERRED)) |
| .setTypePayload( |
| RunnerApi.DeferredArtifactPayload.newBuilder() |
| .setKey("test-key") |
| .build() |
| .toByteString()) |
| .build(); |
| |
| // Testing Resolvers |
| private ArtifactResolver.ResolutionFn dummyMavenFooResolver = |
| info -> { |
| if (info.equals(fooMavenArtifact)) { |
| return Optional.of(ImmutableList.of(fooFileArtifact)); |
| } else { |
| return Optional.empty(); |
| } |
| }; |
| |
| private ArtifactResolver.ResolutionFn dummyAmbientFooBarResolver = |
| info -> { |
| if (info.equals(ambientArtifact)) { |
| return Optional.of(ImmutableList.of(fooFileArtifact, barFileArtifact)); |
| } else { |
| return Optional.empty(); |
| } |
| }; |
| |
| private ArtifactResolver.ResolutionFn dummyAmbientBarFooResolver = |
| info -> { |
| if (info.equals(ambientArtifact)) { |
| return Optional.of(ImmutableList.of(fooFileArtifact, barFileArtifact)); |
| } else { |
| return Optional.empty(); |
| } |
| }; |
| |
| @Test |
| public void testOverridesResolver() { |
| ArtifactResolver resolver = new DefaultArtifactResolver(); |
| resolver.register(dummyAmbientBarFooResolver); |
| resolver.register(dummyAmbientFooBarResolver); |
| RunnerApi.Pipeline pipeline = |
| resolver.resolveArtifacts(createEmptyPipeline(ImmutableList.of(ambientArtifact))); |
| assertThat( |
| createEmptyPipeline(ImmutableList.of(fooFileArtifact, barFileArtifact)), equalTo(pipeline)); |
| } |
| |
| @Test |
| public void testUnknownArtifactInformation() { |
| ArtifactResolver resolver = new DefaultArtifactResolver(); |
| resolver.register(dummyMavenFooResolver); |
| try { |
| resolver.resolveArtifacts( |
| createEmptyPipeline(ImmutableList.of(fooMavenArtifact, ambientArtifact))); |
| fail(); |
| } catch (RuntimeException e) { |
| assertThat(e.getMessage(), startsWith("Cannot resolve artifact information:")); |
| } |
| } |
| } |