12d52f4d4e6091cb4d112728dc7f4f278c44ef0e
[integration.git] /
1 package org.onap.integration.test.mocks.sniroemulator.extension;
2
3 import com.github.tomakehurst.wiremock.common.Notifier;
4 import com.github.tomakehurst.wiremock.core.Admin;
5 import com.github.tomakehurst.wiremock.extension.Parameters;
6 import com.github.tomakehurst.wiremock.extension.PostServeAction;
7 import com.github.tomakehurst.wiremock.http.HttpClientFactory;
8 import com.github.tomakehurst.wiremock.http.HttpHeader;
9 import com.github.tomakehurst.wiremock.stubbing.ServeEvent;
10 import org.apache.http.HttpResponse;
11 import org.apache.http.client.HttpClient;
12 import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
13 import org.apache.http.client.methods.HttpUriRequest;
14 import org.apache.http.entity.ByteArrayEntity;
15 import org.apache.http.util.EntityUtils;
16
17 import java.io.IOException;
18 import java.util.concurrent.Executors;
19 import java.util.concurrent.ScheduledExecutorService;
20
21 import static com.github.tomakehurst.wiremock.common.Exceptions.throwUnchecked;
22 import static com.github.tomakehurst.wiremock.common.LocalNotifier.notifier;
23 import static com.github.tomakehurst.wiremock.http.HttpClientFactory.getHttpRequestFor;
24 import static java.util.concurrent.TimeUnit.SECONDS;
25
26 public class Webhooks extends PostServeAction {
27
28     private final ScheduledExecutorService scheduler;
29     private final HttpClient httpClient;
30
31     public Webhooks() {
32         scheduler = Executors.newScheduledThreadPool(10);
33         httpClient = HttpClientFactory.createClient();
34     }
35
36     @Override
37     public String getName() {
38         return "webhook";
39     }
40
41     @Override
42     public void doAction(ServeEvent serveEvent, Admin admin, Parameters parameters) {
43         final WebhookDefinition definition = parameters.as(WebhookDefinition.class);
44         final Notifier notifier = notifier();
45
46         scheduler.schedule(
47             new Runnable() {
48                 @Override
49                 public void run() {
50                     HttpUriRequest request = buildRequest(definition);
51
52                     try {
53                         HttpResponse response = httpClient.execute(request);
54                         notifier.info(
55                             String.format("Webhook %s request to %s returned status %s\n\n%s",
56                                 definition.getMethod(),
57                                 definition.getUrl(),
58                                 response.getStatusLine(),
59                                 EntityUtils.toString(response.getEntity())
60                             )                            
61                         );
62                         System.out.println(String.format("Webhook %s request to %s returned status %s\n\n%s",
63                                         definition.getMethod(),
64                                         definition.getUrl(),
65                                         response.getStatusLine(),
66                                         EntityUtils.toString(response.getEntity())                              
67                                         )
68                         );
69                     } catch (IOException e) {
70                         throwUnchecked(e);
71                     }
72                 }
73             },
74             0L,
75             SECONDS
76         );
77     }
78
79     private static HttpUriRequest buildRequest(WebhookDefinition definition) {
80         HttpUriRequest request = getHttpRequestFor(
81                 definition.getMethod(),
82                 definition.getUrl().toString()
83         );
84
85         for (HttpHeader header: definition.getHeaders().all()) {
86             request.addHeader(header.key(), header.firstValue());
87         }
88
89         if (definition.getMethod().hasEntity()) {
90             HttpEntityEnclosingRequestBase entityRequest = (HttpEntityEnclosingRequestBase) request;
91             entityRequest.setEntity(new ByteArrayEntity(definition.getBinaryBody()));
92         }
93
94         return request;
95     }
96
97     public static WebhookDefinition webhook() {
98         return new WebhookDefinition();
99     }
100 }