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;
include=JsonTypeInfo.As.PROPERTY,
property="object_kind")
@JsonSubTypes({
@JsonSubTypes.Type(value = BuildEvent.class, name = BuildEvent.OBJECT_KIND),
@JsonSubTypes.Type(value = IssueEvent.class, name = IssueEvent.OBJECT_KIND),
@JsonSubTypes.Type(value = MergeRequestEvent.class, name = MergeRequestEvent.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 = 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 String getObjectKind();
......
......@@ -47,23 +47,23 @@ public interface WebHookListener extends java.util.EventListener {
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.
*
* @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 {
LOG.info("handleEvent: X-Gitlab-Event=" + eventName);
switch (eventName) {
case BuildEvent.X_GITLAB_EVENT:
case IssueEvent.X_GITLAB_EVENT:
case MergeRequestEvent.X_GITLAB_EVENT:
case NoteEvent.X_GITLAB_EVENT:
case PipelineEvent.X_GITLAB_EVENT:
case PushEvent.X_GITLAB_EVENT:
case TagPushEvent.X_GITLAB_EVENT:
case WikiPageEvent.X_GITLAB_EVENT:
break;
default:
......@@ -164,11 +167,14 @@ public class WebHookManager {
LOG.info("handleEvent: object_kind=" + event.getObjectKind());
switch (event.getObjectKind()) {
case BuildEvent.OBJECT_KIND:
case IssueEvent.OBJECT_KIND:
case MergeRequestEvent.OBJECT_KIND:
case NoteEvent.OBJECT_KIND:
case PipelineEvent.OBJECT_KIND:
case PushEvent.OBJECT_KIND:
case TagPushEvent.OBJECT_KIND:
case WikiPageEvent.OBJECT_KIND:
break;
default:
......@@ -210,6 +216,10 @@ public class WebHookManager {
public void fireEvent(Event event) throws GitLabApiException {
switch (event.getObjectKind()) {
case BuildEvent.OBJECT_KIND:
fireBuildEvent((BuildEvent) event);
break;
case IssueEvent.OBJECT_KIND:
fireIssueEvent((IssueEvent) event);
break;
......@@ -222,6 +232,10 @@ public class WebHookManager {
fireNoteEvent((NoteEvent) event);
break;
case PipelineEvent.OBJECT_KIND:
firePipelineEvent((PipelineEvent) event);
break;
case PushEvent.OBJECT_KIND:
firePushEvent((PushEvent) event);
break;
......@@ -230,6 +244,10 @@ public class WebHookManager {
fireTagPushEvent((TagPushEvent) event);
break;
case WikiPageEvent.OBJECT_KIND:
fireWikiPageEvent((WikiPageEvent) event);
break;
default:
String message = "Unsupported event object_kind, object_kind=" + event.getObjectKind();
LOG.warning(message);
......@@ -237,6 +255,13 @@ public class WebHookManager {
}
}
protected void fireBuildEvent(BuildEvent buildEvent) {
for (WebHookListener listener : webhookListeners) {
listener.onBuildEvent(buildEvent);
}
}
protected void fireIssueEvent(IssueEvent issueEvent) {
for (WebHookListener listener : webhookListeners) {
......@@ -258,6 +283,13 @@ public class WebHookManager {
}
}
protected void firePipelineEvent(PipelineEvent pipelineEvent) {
for (WebHookListener listener : webhookListeners) {
listener.onPipelineEvent(pipelineEvent);
}
}
protected void firePushEvent(PushEvent pushEvent) {
for (WebHookListener listener : webhookListeners) {
......@@ -271,4 +303,11 @@ public class WebHookManager {
listener.onTagPushEvent(tagPushEvent);
}
}
protected void fireWikiPageEvent(WikiPageEvent wikiPageEvent) {
for (WebHookListener listener : webhookListeners) {
listener.onWikiPageEvent(wikiPageEvent);
}
}
}
......@@ -6,12 +6,15 @@ import java.io.IOException;
import java.io.InputStreamReader;
import org.gitlab4j.api.utils.JacksonJson;
import org.gitlab4j.api.webhook.BuildEvent;
import org.gitlab4j.api.webhook.Event;
import org.gitlab4j.api.webhook.IssueEvent;
import org.gitlab4j.api.webhook.MergeRequestEvent;
import org.gitlab4j.api.webhook.NoteEvent;
import org.gitlab4j.api.webhook.PipelineEvent;
import org.gitlab4j.api.webhook.PushEvent;
import org.gitlab4j.api.webhook.TagPushEvent;
import org.gitlab4j.api.webhook.WikiPageEvent;
import org.junit.BeforeClass;
import org.junit.Test;
......@@ -50,6 +53,13 @@ public class TestGitLabApiEvents {
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
public void testPushEvent() throws Exception {
......@@ -92,10 +102,27 @@ public class TestGitLabApiEvents {
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
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"));
event = makeFakeApiCall(Event.class, "merge-request-event");
......@@ -113,8 +140,17 @@ public class TestGitLabApiEvents {
event = makeFakeApiCall(Event.class, "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");
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 {
......
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