Commit 6404e89b authored by Greg Messner's avatar Greg Messner
Browse files

Completed webhooks support.

parent beeea2e9
...@@ -7,11 +7,14 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo; ...@@ -7,11 +7,14 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo;
include=JsonTypeInfo.As.PROPERTY, include=JsonTypeInfo.As.PROPERTY,
property="object_kind") property="object_kind")
@JsonSubTypes({ @JsonSubTypes({
@JsonSubTypes.Type(value = BuildEvent.class, name = BuildEvent.OBJECT_KIND),
@JsonSubTypes.Type(value = IssueEvent.class, name = IssueEvent.OBJECT_KIND), @JsonSubTypes.Type(value = IssueEvent.class, name = IssueEvent.OBJECT_KIND),
@JsonSubTypes.Type(value = MergeRequestEvent.class, name = MergeRequestEvent.OBJECT_KIND), @JsonSubTypes.Type(value = MergeRequestEvent.class, name = MergeRequestEvent.OBJECT_KIND),
@JsonSubTypes.Type(value = NoteEvent.class, name = NoteEvent.OBJECT_KIND), @JsonSubTypes.Type(value = NoteEvent.class, name = NoteEvent.OBJECT_KIND),
@JsonSubTypes.Type(value = PipelineEvent.class, name = PipelineEvent.OBJECT_KIND),
@JsonSubTypes.Type(value = PushEvent.class, name = PushEvent.OBJECT_KIND), @JsonSubTypes.Type(value = PushEvent.class, name = PushEvent.OBJECT_KIND),
@JsonSubTypes.Type(value = TagPushEvent.class, name = TagPushEvent.OBJECT_KIND) @JsonSubTypes.Type(value = TagPushEvent.class, name = TagPushEvent.OBJECT_KIND),
@JsonSubTypes.Type(value = WikiPageEvent.class, name = WikiPageEvent.OBJECT_KIND)
}) })
public interface Event { public interface Event {
public String getObjectKind(); public String getObjectKind();
......
...@@ -47,23 +47,23 @@ public interface WebHookListener extends java.util.EventListener { ...@@ -47,23 +47,23 @@ public interface WebHookListener extends java.util.EventListener {
public void onNoteEvent(NoteEvent noteEvent); public void onNoteEvent(NoteEvent noteEvent);
/** /**
* This method is called when a WebHook tag push event has been received. * This method is called when a WebHook build event has been received.
* *
* @param pushEvent the PushEvent instance * @param buildEvent the BuildEvent instance
*/ */
public void onJobEvent(PushEvent pushEvent); public void onBuildEvent(BuildEvent buildEvent);
/** /**
* This method is called when a WebHook pipeline event has been received. * This method is called when a WebHook pipeline event has been received.
* *
* @param pushEvent the PushEvent instance * @param pushEvent the PipelineEvent instance
*/ */
public void onPipelineEvent(PushEvent pushEvent); public void onPipelineEvent(PipelineEvent pipelineEvent);
/** /**
* This method is called when a WebHook wiki event has been received. * This method is called when a WebHook wiki page event has been received.
* *
* @param pushEvent the PushEvent instance * @param wikiEvent the WikiPageEvent instance
*/ */
public void onWikiEvent(PushEvent pushEvent); public void onWikiPageEvent(WikiPageEvent wikiEvent);
} }
...@@ -105,11 +105,14 @@ public class WebHookManager { ...@@ -105,11 +105,14 @@ public class WebHookManager {
LOG.info("handleEvent: X-Gitlab-Event=" + eventName); LOG.info("handleEvent: X-Gitlab-Event=" + eventName);
switch (eventName) { switch (eventName) {
case BuildEvent.X_GITLAB_EVENT:
case IssueEvent.X_GITLAB_EVENT: case IssueEvent.X_GITLAB_EVENT:
case MergeRequestEvent.X_GITLAB_EVENT: case MergeRequestEvent.X_GITLAB_EVENT:
case NoteEvent.X_GITLAB_EVENT: case NoteEvent.X_GITLAB_EVENT:
case PipelineEvent.X_GITLAB_EVENT:
case PushEvent.X_GITLAB_EVENT: case PushEvent.X_GITLAB_EVENT:
case TagPushEvent.X_GITLAB_EVENT: case TagPushEvent.X_GITLAB_EVENT:
case WikiPageEvent.X_GITLAB_EVENT:
break; break;
default: default:
...@@ -164,11 +167,14 @@ public class WebHookManager { ...@@ -164,11 +167,14 @@ public class WebHookManager {
LOG.info("handleEvent: object_kind=" + event.getObjectKind()); LOG.info("handleEvent: object_kind=" + event.getObjectKind());
switch (event.getObjectKind()) { switch (event.getObjectKind()) {
case BuildEvent.OBJECT_KIND:
case IssueEvent.OBJECT_KIND: case IssueEvent.OBJECT_KIND:
case MergeRequestEvent.OBJECT_KIND: case MergeRequestEvent.OBJECT_KIND:
case NoteEvent.OBJECT_KIND: case NoteEvent.OBJECT_KIND:
case PipelineEvent.OBJECT_KIND:
case PushEvent.OBJECT_KIND: case PushEvent.OBJECT_KIND:
case TagPushEvent.OBJECT_KIND: case TagPushEvent.OBJECT_KIND:
case WikiPageEvent.OBJECT_KIND:
break; break;
default: default:
...@@ -210,6 +216,10 @@ public class WebHookManager { ...@@ -210,6 +216,10 @@ public class WebHookManager {
public void fireEvent(Event event) throws GitLabApiException { public void fireEvent(Event event) throws GitLabApiException {
switch (event.getObjectKind()) { switch (event.getObjectKind()) {
case BuildEvent.OBJECT_KIND:
fireBuildEvent((BuildEvent) event);
break;
case IssueEvent.OBJECT_KIND: case IssueEvent.OBJECT_KIND:
fireIssueEvent((IssueEvent) event); fireIssueEvent((IssueEvent) event);
break; break;
...@@ -222,6 +232,10 @@ public class WebHookManager { ...@@ -222,6 +232,10 @@ public class WebHookManager {
fireNoteEvent((NoteEvent) event); fireNoteEvent((NoteEvent) event);
break; break;
case PipelineEvent.OBJECT_KIND:
firePipelineEvent((PipelineEvent) event);
break;
case PushEvent.OBJECT_KIND: case PushEvent.OBJECT_KIND:
firePushEvent((PushEvent) event); firePushEvent((PushEvent) event);
break; break;
...@@ -230,6 +244,10 @@ public class WebHookManager { ...@@ -230,6 +244,10 @@ public class WebHookManager {
fireTagPushEvent((TagPushEvent) event); fireTagPushEvent((TagPushEvent) event);
break; break;
case WikiPageEvent.OBJECT_KIND:
fireWikiPageEvent((WikiPageEvent) event);
break;
default: default:
String message = "Unsupported event object_kind, object_kind=" + event.getObjectKind(); String message = "Unsupported event object_kind, object_kind=" + event.getObjectKind();
LOG.warning(message); LOG.warning(message);
...@@ -237,6 +255,13 @@ public class WebHookManager { ...@@ -237,6 +255,13 @@ public class WebHookManager {
} }
} }
protected void fireBuildEvent(BuildEvent buildEvent) {
for (WebHookListener listener : webhookListeners) {
listener.onBuildEvent(buildEvent);
}
}
protected void fireIssueEvent(IssueEvent issueEvent) { protected void fireIssueEvent(IssueEvent issueEvent) {
for (WebHookListener listener : webhookListeners) { for (WebHookListener listener : webhookListeners) {
...@@ -258,6 +283,13 @@ public class WebHookManager { ...@@ -258,6 +283,13 @@ public class WebHookManager {
} }
} }
protected void firePipelineEvent(PipelineEvent pipelineEvent) {
for (WebHookListener listener : webhookListeners) {
listener.onPipelineEvent(pipelineEvent);
}
}
protected void firePushEvent(PushEvent pushEvent) { protected void firePushEvent(PushEvent pushEvent) {
for (WebHookListener listener : webhookListeners) { for (WebHookListener listener : webhookListeners) {
...@@ -271,4 +303,11 @@ public class WebHookManager { ...@@ -271,4 +303,11 @@ public class WebHookManager {
listener.onTagPushEvent(tagPushEvent); listener.onTagPushEvent(tagPushEvent);
} }
} }
protected void fireWikiPageEvent(WikiPageEvent wikiPageEvent) {
for (WebHookListener listener : webhookListeners) {
listener.onWikiPageEvent(wikiPageEvent);
}
}
} }
...@@ -6,12 +6,15 @@ import java.io.IOException; ...@@ -6,12 +6,15 @@ import java.io.IOException;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import org.gitlab4j.api.utils.JacksonJson; import org.gitlab4j.api.utils.JacksonJson;
import org.gitlab4j.api.webhook.BuildEvent;
import org.gitlab4j.api.webhook.Event; import org.gitlab4j.api.webhook.Event;
import org.gitlab4j.api.webhook.IssueEvent; import org.gitlab4j.api.webhook.IssueEvent;
import org.gitlab4j.api.webhook.MergeRequestEvent; import org.gitlab4j.api.webhook.MergeRequestEvent;
import org.gitlab4j.api.webhook.NoteEvent; import org.gitlab4j.api.webhook.NoteEvent;
import org.gitlab4j.api.webhook.PipelineEvent;
import org.gitlab4j.api.webhook.PushEvent; import org.gitlab4j.api.webhook.PushEvent;
import org.gitlab4j.api.webhook.TagPushEvent; import org.gitlab4j.api.webhook.TagPushEvent;
import org.gitlab4j.api.webhook.WikiPageEvent;
import org.junit.BeforeClass; import org.junit.BeforeClass;
import org.junit.Test; import org.junit.Test;
...@@ -50,6 +53,13 @@ public class TestGitLabApiEvents { ...@@ -50,6 +53,13 @@ public class TestGitLabApiEvents {
assertTrue(compareJson(mergeRequestEvent, "merge-request-event")); assertTrue(compareJson(mergeRequestEvent, "merge-request-event"));
} }
@Test
public void testPipelineEvent() throws Exception {
Event event = makeFakeApiCall(PipelineEvent.class, "pipeline-event");
assertTrue(compareJson(event, "pipeline-event"));
}
@Test @Test
public void testPushEvent() throws Exception { public void testPushEvent() throws Exception {
...@@ -92,10 +102,27 @@ public class TestGitLabApiEvents { ...@@ -92,10 +102,27 @@ public class TestGitLabApiEvents {
assertTrue(compareJson(noteEvent, "note-snippet-event")); assertTrue(compareJson(noteEvent, "note-snippet-event"));
} }
@Test
public void testBuildEvent() throws Exception {
Event event = makeFakeApiCall(BuildEvent.class, "build-event");
assertTrue(compareJson(event, "build-event"));
}
@Test
public void testWikiPageEvent() throws Exception {
Event event = makeFakeApiCall(WikiPageEvent.class, "wiki-page-event");
assertTrue(compareJson(event, "wiki-page-event"));
}
@Test @Test
public void testPolymorphicEvent() throws Exception { public void testPolymorphicEvent() throws Exception {
Event event = makeFakeApiCall(Event.class, "issue-event"); Event event = makeFakeApiCall(Event.class, "build-event");
assertTrue(compareJson(event, "build-event"));
event = makeFakeApiCall(Event.class, "issue-event");
assertTrue(compareJson(event, "issue-event")); assertTrue(compareJson(event, "issue-event"));
event = makeFakeApiCall(Event.class, "merge-request-event"); event = makeFakeApiCall(Event.class, "merge-request-event");
...@@ -113,8 +140,17 @@ public class TestGitLabApiEvents { ...@@ -113,8 +140,17 @@ public class TestGitLabApiEvents {
event = makeFakeApiCall(Event.class, "note-snippet-event"); event = makeFakeApiCall(Event.class, "note-snippet-event");
assertTrue(compareJson(event, "note-snippet-event")); assertTrue(compareJson(event, "note-snippet-event"));
event = makeFakeApiCall(Event.class, "pipeline-event");
assertTrue(compareJson(event, "pipeline-event"));
event = makeFakeApiCall(Event.class, "push-event");
assertTrue(compareJson(event, "push-event"));
event = makeFakeApiCall(Event.class, "tag-push-event"); event = makeFakeApiCall(Event.class, "tag-push-event");
assertTrue(compareJson(event, "tag-push-event")); assertTrue(compareJson(event, "tag-push-event"));
event = makeFakeApiCall(Event.class, "wiki-page-event");
assertTrue(compareJson(event, "wiki-page-event"));
} }
private <T> T makeFakeApiCall(Class<T> returnType, String file) throws JsonParseException, JsonMappingException, IOException { private <T> T makeFakeApiCall(Class<T> returnType, String file) throws JsonParseException, JsonMappingException, IOException {
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment