From 2b93e5ad77fde457ca322bcd8326e000f5e401da Mon Sep 17 00:00:00 2001 From: Jeff Cantrill Date: Tue, 24 Mar 2015 17:03:52 -0400 Subject: [PATCH] [OSJC-146] Expose webhook URL on BuildConfig --- .../client/model/build/IWebhookTrigger.java | 8 +++- .../internal/client/model/BuildConfig.java | 7 +++- .../client/model/build/WebhookTrigger.java | 27 +++++++++++++- .../model/build/V1Beta1BuildConfigTest.java | 15 +++++--- .../model/build/WebhookTriggerTest.java | 37 +++++++++++++++++++ 5 files changed, 84 insertions(+), 10 deletions(-) create mode 100644 src/test/java/com/openshift3/internal/client/model/build/WebhookTriggerTest.java diff --git a/src/main/java/com/openshift3/client/model/build/IWebhookTrigger.java b/src/main/java/com/openshift3/client/model/build/IWebhookTrigger.java index ffcdfd96..95ed4ca7 100644 --- a/src/main/java/com/openshift3/client/model/build/IWebhookTrigger.java +++ b/src/main/java/com/openshift3/client/model/build/IWebhookTrigger.java @@ -6,9 +6,15 @@ * * Contributors: Red Hat, Inc. ******************************************************************************/ -package com.openshift3.client.model.build; + package com.openshift3.client.model.build; public interface IWebhookTrigger extends IBuildTrigger { String getSecret(); + + /** + * The URL to trigger the build for the resource + * @return the URL or empty if the resource is not configured with an IClient + */ + String getWebhookURL(); } diff --git a/src/main/java/com/openshift3/internal/client/model/BuildConfig.java b/src/main/java/com/openshift3/internal/client/model/BuildConfig.java index 4d0182f8..30dd8749 100644 --- a/src/main/java/com/openshift3/internal/client/model/BuildConfig.java +++ b/src/main/java/com/openshift3/internal/client/model/BuildConfig.java @@ -42,13 +42,16 @@ public BuildConfig(ModelNode node, IClient client, Map proper public List getBuildTriggers() { List triggers = new ArrayList(); List list = get(BUILDCONFIG_TRIGGERS).asList(); + final String name = getName(); + final String url = getClient() != null ? getClient().getBaseURL().toString() : ""; + final String version = getClient() != null ? getClient().getOpenShiftAPIVersion() : ""; for (ModelNode node : list) { switch(BuildTriggerType.valueOf(node.get("type").asString())){ case generic: - triggers.add(new WebhookTrigger(BuildTriggerType.generic, node.get(new String[]{"generic","secret"}).asString())); + triggers.add(new WebhookTrigger(BuildTriggerType.generic, node.get(new String[]{"generic","secret"}).asString(), name, url, version,getNamespace())); break; case github: - triggers.add(new WebhookTrigger(BuildTriggerType.github, node.get(new String[]{"github","secret"}).asString())); + triggers.add(new WebhookTrigger(BuildTriggerType.github, node.get(new String[]{"github","secret"}).asString(), name, url, version, getNamespace())); break; case imageChange: triggers.add(new ImageChangeTrigger( diff --git a/src/main/java/com/openshift3/internal/client/model/build/WebhookTrigger.java b/src/main/java/com/openshift3/internal/client/model/build/WebhookTrigger.java index 335fea3c..d6bce49d 100644 --- a/src/main/java/com/openshift3/internal/client/model/build/WebhookTrigger.java +++ b/src/main/java/com/openshift3/internal/client/model/build/WebhookTrigger.java @@ -8,6 +8,7 @@ ******************************************************************************/ package com.openshift3.internal.client.model.build; +import com.openshift.internal.client.utils.StringUtils; import com.openshift3.client.model.build.BuildTriggerType; import com.openshift3.client.model.build.IWebhookTrigger; @@ -15,10 +16,18 @@ public class WebhookTrigger implements IWebhookTrigger { private BuildTriggerType type; private String secret; + private String resourceName; + private String baseURL; + private String apiVersion; + private String namespace; - public WebhookTrigger(BuildTriggerType triggerType, String secret) { + public WebhookTrigger(BuildTriggerType triggerType, String secret, String resourceName, String baseURL, String apiVersion, String namespace) { this.type = triggerType; this.secret = secret; + this.resourceName = resourceName; + this.baseURL = baseURL; + this.apiVersion = apiVersion; + this.namespace = namespace; } @Override @@ -31,6 +40,21 @@ public String getSecret() { return secret; } + @Override + public String getWebhookURL() { + if(StringUtils.isEmpty(baseURL)){ + return ""; + } + return String.format("%s/osapi/%s/buildConfigHooks/%s/%s/%s?namespace=%s", + baseURL, + apiVersion, + resourceName, + secret, + type.toString(), + namespace + ); + } + @Override public int hashCode() { final int prime = 31; @@ -59,5 +83,4 @@ public boolean equals(Object obj) { return true; } - } diff --git a/src/test/java/com/openshift3/internal/client/model/build/V1Beta1BuildConfigTest.java b/src/test/java/com/openshift3/internal/client/model/build/V1Beta1BuildConfigTest.java index 3e30e29a..b201014a 100644 --- a/src/test/java/com/openshift3/internal/client/model/build/V1Beta1BuildConfigTest.java +++ b/src/test/java/com/openshift3/internal/client/model/build/V1Beta1BuildConfigTest.java @@ -9,7 +9,9 @@ package com.openshift3.internal.client.model.build; import static org.junit.Assert.*; -import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.*; + +import java.net.URL; import org.jboss.dmr.ModelNode; import org.junit.BeforeClass; @@ -35,10 +37,13 @@ public class V1Beta1BuildConfigTest { private static IBuildConfig config; + private static IClient client; @BeforeClass - public static void setup(){ - IClient client = mock(IClient.class); + public static void setup() throws Exception{ + client = mock(IClient.class); + when(client.getBaseURL()).thenReturn(new URL("https://localhost:8443")); + when(client.getOpenShiftAPIVersion()).thenReturn("v1beta1"); ModelNode node = ModelNode.fromJSONString(Samples.BUILD_CONFIG_MINIMAL.getContentAsString()); config = new BuildConfig(node, client, ResourcePropertiesRegistry.getInstance().get("v1beta1", ResourceKind.BuildConfig)); } @@ -46,8 +51,8 @@ public static void setup(){ @Test public void getBuildTriggers(){ IBuildTrigger [] exp = new IBuildTrigger[]{ - new WebhookTrigger(BuildTriggerType.github, "secret101"), - new WebhookTrigger(BuildTriggerType.generic, "secret101"), + new WebhookTrigger(BuildTriggerType.github, "secret101","foo", "https://localhost:8443", "v1beta1","foo"), + new WebhookTrigger(BuildTriggerType.generic, "secret101","foo", "https://localhost:8443", "v1beta1","foo"), new ImageChangeTrigger("openshift/ruby-20-centos", "ruby-20-centos", "latest") }; assertArrayEquals(exp, config.getBuildTriggers().toArray()); diff --git a/src/test/java/com/openshift3/internal/client/model/build/WebhookTriggerTest.java b/src/test/java/com/openshift3/internal/client/model/build/WebhookTriggerTest.java new file mode 100644 index 00000000..7bfb8db9 --- /dev/null +++ b/src/test/java/com/openshift3/internal/client/model/build/WebhookTriggerTest.java @@ -0,0 +1,37 @@ +/******************************************************************************* + * Copyright (c) 2015 Red Hat, Inc. Distributed under license by Red Hat, Inc. + * All rights reserved. This program is made available under the terms of the + * Eclipse Public License v1.0 which accompanies this distribution, and is + * available at http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: Red Hat, Inc. + ******************************************************************************/ +package com.openshift3.internal.client.model.build; + +import static org.junit.Assert.*; + +import org.junit.Before; +import org.junit.Test; + +import com.openshift3.client.model.build.BuildTriggerType; +import com.openshift3.client.model.build.IWebhookTrigger; + +public class WebhookTriggerTest { + + private IWebhookTrigger trigger; + + @Before + public void setup(){ + } + @Test + public void testGetWebhookUrlWhenResourceHasBaseURL() { + trigger = new WebhookTrigger(BuildTriggerType.generic, "secret101","foo","https://localhost:8443","v1beta1","test"); + assertEquals("https://localhost:8443/osapi/v1beta1/buildConfigHooks/foo/secret101/generic?namespace=test", trigger.getWebhookURL()); + } + + @Test + public void testGetWebhookUrlWhenResourceDoesNotHaveBaseURL(){ + trigger = new WebhookTrigger(BuildTriggerType.generic, "secret101","foo"," ","v1beta1","test"); + assertEquals("",trigger.getWebhookURL()); + } +}