@Override public Object[] resolve(Method method) { Object[] values = new Object[method.getParameterTypes().length]; Class<?>[] parameterTypes = method.getParameterTypes(); for (int i = 0; i < parameterTypes.length; i++) { RouteURL routeURL = getAnnotation(RouteURL.class, method.getParameterAnnotations()[i]); if (routeURL != null) { Object url = lookup(routeURL, method.getParameterTypes()[i]); values[i] = url; AwaitRoute await = getAnnotation(AwaitRoute.class, method.getParameterAnnotations()[i]); configureAwaitRoute(url, await); } } return values; }
protected OpenShiftClient getOpenshiftClient() { return getClient().adapt(OpenShiftClient.class); } }
private void configureAwaitRoute(Object route, AwaitRoute await) { // we _intentionally_ don't check if `configurationInstance.get().isWaitEnabled()` here; // even if awaiting readiness is disabled, we still want to await the route, because the user // explicitly opted into it, maybe because they want to workaround a Fabric8 Kubernetes Client // issue and rely on @AwaitRoute instead if (await == null) { return; } URL url; try { url = new URL(route.toString()); if (!AwaitRoute.DEFAULT_PATH_FOR_ROUTE_AVAILABILITY_CHECK.equals(await.path())) { url = new URL(url.getProtocol(), url.getHost(), url.getPort(), await.path()); } } catch (MalformedURLException e) { throw new RuntimeException(e); } // `config` is guaranteed to be non-null at this point -- the `lookup` method checks this, // and calls to `configureAwaitRoute` are always preceded by calls to `lookup` CubeOpenShiftConfiguration config = (CubeOpenShiftConfiguration) configurationInstance.get(); int configuredRepetitions = config.getAwaitRouteRepetitions(); int annotationRepetitions = await.repetitions(); int repetitions = configuredRepetitions > 1 ? configuredRepetitions : annotationRepetitions; awaitRoute(url, await.timeout(), await.timeoutUnit(), repetitions, await.statusCode()); } }
@Category(RequiresOpenshift.class) @RequiresOpenshift @RunWith(ArquillianConditionalRunner.class) public class OpenshiftIT { @AwaitRoute @RouteURL("${app.name}") private URL baseURL; @Before public void setup() throws Exception { RestAssured.baseURI = baseURL.toString(); } @Test public void testGreetingEndpoint() { when() .get() .then() .statusCode(200) .body(containsString("Greetings from Spring Boot!")); } }
@Test public void injectedIntoMethodShouldNotBeNull( @RouteURL(value = "docker-registry", namespace = "default") URL routeURL) { assertThat(routeURL).isNotNull(); }
final String routeName = expressionResolver.resolve(routeURL.value()); if (routeName == null || routeName.length() == 0) { throw new NullPointerException("Route name is null, must specify a route name!"); final String namespace = "".equals(routeURL.namespace()) ? config.getNamespace() : routeURL.namespace(); URL url = new URL(protocol, route.getSpec().getHost(), port, routeURL.path()); if (returnType == URL.class) { return url;
@Test @Template(url = "https://gist.githubusercontent.com/dipak-pawar/403b870fc92f6569f64f12b506318606/raw/4dd7cd4b259f893353509411ba4777792cacd034/hello_openshift_route_template.yaml", parameters = @TemplateParameter(name = "ROUTE_NAME", value = "hello-openshift-method-route")) public void should_create_method_template_resources( @RouteURL("hello-openshift-method-route") @AwaitRoute URL routeUrl) throws IOException { verifyResponse(routeUrl); }
@Category(RequiresOpenshift.class) @RequiresOpenshift @RunWith(ArquillianConditionalRunner.class) public class RouteInOtherNamespaceIT { @RouteURL(value = "docker-registry", namespace = "default") private URL routeURL; @Test public void injectedIntoClassShouldNotBeNull() { assertThat(routeURL).isNotNull(); } @Test public void injectedIntoMethodShouldNotBeNull( @RouteURL(value = "docker-registry", namespace = "default") URL routeURL) { assertThat(routeURL).isNotNull(); } }
@Override public void enrich(Object testCase) { for (Field field : ReflectionUtil.getFieldsWithAnnotation(testCase.getClass(), RouteURL.class)) { Object url; AwaitRoute await; try { if (!field.isAccessible()) { field.setAccessible(true); } RouteURL routeURL = getAnnotation(RouteURL.class, field.getAnnotations()); url = lookup(routeURL, field.getType()); field.set(testCase, url); await = getAnnotation(AwaitRoute.class, field.getAnnotations()); } catch (Exception e) { throw new RuntimeException("Could not set RouteURL value on field " + field, e); } configureAwaitRoute(url, await); } }
@RunWith(ArquillianConditionalRunner.class) @Category(RequiresOpenshift.class) @RequiresOpenshift @Ignore("This test assumes that you have a cluster installed with Istio and BookInfo application deployed. We could make a full test preparing all this, but it will take lot of time, not error safe and test execution would take like 10 minutes") public class ReviewsIstioSourceOnMethodIT extends AbstractReviewsTest { @RouteURL("productpage") @AwaitRoute private URL url; @ArquillianResource private IstioAssistant istioAssistant; @IstioResource("classpath:route-rule-reviews-test-v${serviceVersion:2}.yaml") @Test public void alex_should_use_reviews_v2_version() throws Exception { Thread.sleep(10000); //wait until the rule get's applied alex_should_use_reviews_v2_version(url, istioAssistant); } }
@RouteURL("${route.name}") @AwaitRoute private URL url;
public class HelloWorldTemplateIT { @RouteURL("hello-openshift-route") @AwaitRoute private URL url;
@RunWith(ArquillianConditionalRunner.class) @Category(RequiresOpenshift.class) @RequiresOpenshift @IstioResource("classpath:route-rule-reviews-test-v${serviceVersion:2}.yaml") @Ignore("This test assumes that you have a cluster installed with Istio and BookInfo application deployed. We could make a full test preparing all this, but it will take lot of time, not error safe and test execution would take like 10 minutes") public class ReviewsIT extends AbstractReviewsTest { @RouteURL("productpage") @AwaitRoute private URL url; // tag::istio_assistant[] @ArquillianResource private IstioAssistant istioAssistant; // end::istio_assistant[] @Test public void should_get_v1_if_not_logged() { should_get_v1_if_not_logged(url); } @Test public void alex_should_use_reviews_v2_version() throws IOException { alex_should_use_reviews_v2_version(url, istioAssistant); } }
@Category(RequiresOpenshift.class) @RequiresOpenshift @RunWith(ArquillianConditionalRunner.class) @Templates(templates = { @Template(url = "classpath:hello-openshift-templates.yaml", parameters = @TemplateParameter(name = "RESPONSE", value = "Hello from Arquillian Templates")) }) public class HelloWorldTemplatesIT { @RouteURL("hello-openshift-templates-route") @AwaitRoute private URL helloOpenshiftTemplates; @Test public void should_create_resources_from_templates() throws IOException { assertThat(helloOpenshiftTemplates).isNotNull(); OkHttpClient okHttpClient = new OkHttpClient(); Request request = new Request.Builder().get().url(helloOpenshiftTemplates).build(); Response response = okHttpClient.newCall(request).execute(); assertThat(response).isNotNull(); assertThat(response.code()).isEqualTo(200); assertThat(response.body().string()).isEqualTo("Hello from Arquillian Templates\n"); } }
public class ReviewsITLegacy { @RouteURL("productpage") @AwaitRoute private URL url;