2  * Copyright 2017 Huawei Technologies Co., Ltd.
 
   4  * Licensed under the Apache License, Version 2.0 (the "License");
 
   5  * you may not use this file except in compliance with the License.
 
   6  * You may obtain a copy of the License at
 
   8  *     http://www.apache.org/licenses/LICENSE-2.0
 
  10  * Unless required by applicable law or agreed to in writing, software
 
  11  * distributed under the License is distributed on an "AS IS" BASIS,
 
  12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
  13  * See the License for the specific language governing permissions and
 
  14  * limitations under the License.
 
  17 package org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.common.restclient;
 
  19 import static org.junit.Assert.assertEquals;
 
  20 import static org.junit.Assert.assertNotNull;
 
  22 import java.io.IOException;
 
  23 import java.lang.reflect.Field;
 
  25 import org.eclipse.jetty.client.HttpClient;
 
  26 import org.eclipse.jetty.client.HttpExchange;
 
  27 import org.junit.After;
 
  28 import org.junit.AfterClass;
 
  29 import org.junit.Assert;
 
  30 import org.junit.Before;
 
  31 import org.junit.BeforeClass;
 
  32 import org.junit.Rule;
 
  33 import org.junit.Test;
 
  34 import org.junit.rules.ExpectedException;
 
  35 import org.junit.runner.RunWith;
 
  39 import mockit.integration.junit4.JMockit;
 
  49 @RunWith(JMockit.class)
 
  50 public class TestHttpRest {
 
  53     public ExpectedException thrown = ExpectedException.none();
 
  58      * @throws java.lang.Exception
 
  62     public static void setUpBeforeClass() throws Exception {
 
  68      * @throws java.lang.Exception
 
  72     public static void tearDownAfterClass() throws Exception {
 
  78      * @throws java.lang.Exception
 
  82     public void setUp() throws Exception {
 
  88      * @throws java.lang.Exception
 
  92     public void tearDown() throws Exception {
 
 102     public void testInitHttpRest() throws Exception {
 
 103         final RestfulOptions options = new RestfulOptions();
 
 104         new MockUp<HttpClient>() {
 
 107             public void doStart() {
 
 110         final HttpRest httpRest = new HttpRest();
 
 111         httpRest.initHttpRest(options);
 
 112         final Field httpClient = HttpBaseRest.class.getDeclaredField("client");
 
 113         httpClient.setAccessible(true);
 
 114         Assert.assertNotNull(httpClient.get(httpRest));
 
 120      * @throws NoSuchFieldException
 
 125     public void testCreateRestHttpContentExchange() throws NoSuchFieldException, Exception {
 
 126         final HttpBaseRest httpRest = new HttpRest();
 
 127         final RestfulAsyncCallback callback = new RestfulAsyncCallback() {
 
 130             public void callback(final RestfulResponse response) {
 
 135             public void handleExcepion(final Throwable e) {
 
 140         final RestHttpContentExchange exchange = httpRest.createRestHttpContentExchange(callback);
 
 141         assertNotNull(exchange);
 
 142         final Field callbackField = RestHttpContentExchange.class.getDeclaredField("callback");
 
 143         assertNotNull(callbackField);
 
 153     public void testGetStringRestfulParametes() throws Exception {
 
 154         final RestfulOptions options = new RestfulOptions();
 
 156         final HttpRest httpRest = getHttpRest(options);
 
 157         new MockUp<RestHttpContentExchange>() {
 
 160             public int waitForDone() {
 
 161                 return HttpExchange.STATUS_COMPLETED;
 
 165             public RestfulResponse getResponse() throws IOException {
 
 166                 final RestfulResponse response = new RestfulResponse();
 
 167                 response.setStatus(HttpExchange.STATUS_COMPLETED);
 
 172         final RestfulParametes parametes = new RestfulParametes();
 
 173         parametes.put("id", "1234");
 
 174         parametes.put("name", "some-name");
 
 175         parametes.put("address", null);
 
 176         parametes.putHttpContextHeader("Content-Type", "application/json");
 
 177         parametes.putHttpContextHeader("Accept-Encoding", "*/*");
 
 178         final RestfulResponse response = httpRest.get("path/to/service", parametes);
 
 179         assertEquals(HttpExchange.STATUS_COMPLETED, response.getStatus());
 
 190     public void testGetStringRestfulParametesRestfulOptions() throws Exception {
 
 191         final RestfulOptions options = new RestfulOptions();
 
 193         final HttpRest httpRest = getHttpRest(options);
 
 194         new MockUp<RestHttpContentExchange>() {
 
 197             public int waitForDone() {
 
 198                 return HttpExchange.STATUS_COMPLETED;
 
 202             public RestfulResponse getResponse() throws IOException {
 
 203                 final RestfulResponse response = new RestfulResponse();
 
 204                 response.setStatus(HttpExchange.STATUS_COMPLETED);
 
 209         final RestfulResponse response = httpRest.get("path/to/service", new RestfulParametes(), options);
 
 210         assertEquals(HttpExchange.STATUS_COMPLETED, response.getStatus());
 
 220     public void testHeadStringRestfulParametes() throws Exception {
 
 221         final RestfulOptions options = new RestfulOptions();
 
 223         final HttpRest httpRest = getHttpRest(options);
 
 224         new MockUp<RestHttpContentExchange>() {
 
 227             public int waitForDone() {
 
 228                 return HttpExchange.STATUS_COMPLETED;
 
 232             public RestfulResponse getResponse() throws IOException {
 
 233                 final RestfulResponse response = new RestfulResponse();
 
 234                 response.setStatus(HttpExchange.STATUS_COMPLETED);
 
 239         final RestfulParametes parametes = new RestfulParametes();
 
 240         parametes.put("id", "1234");
 
 241         parametes.put("name", "some-name");
 
 242         parametes.put("address", null);
 
 243         parametes.putHttpContextHeader("Content-Type", "");
 
 244         parametes.putHttpContextHeader("Accept-Encoding", "");
 
 245         final RestfulResponse response = httpRest.head("path/to/service", parametes);
 
 246         assertEquals(HttpExchange.STATUS_COMPLETED, response.getStatus());
 
 256     public void testHeadStringRestfulParametesRestfulOptions() throws Exception {
 
 257         final RestfulOptions options = new RestfulOptions();
 
 259         final HttpRest httpRest = getHttpRest(options);
 
 260         new MockUp<RestHttpContentExchange>() {
 
 263             public int waitForDone() {
 
 264                 return HttpExchange.STATUS_COMPLETED;
 
 268             public RestfulResponse getResponse() throws IOException {
 
 269                 final RestfulResponse response = new RestfulResponse();
 
 270                 response.setStatus(HttpExchange.STATUS_COMPLETED);
 
 275         final RestfulParametes parametes = new RestfulParametes();
 
 276         parametes.put("id", "1234");
 
 277         parametes.put("name", "some-name");
 
 278         parametes.put("address", null);
 
 279         parametes.putHttpContextHeader("Content-Type", "");
 
 280         parametes.putHttpContextHeader("Accept-Encoding", "");
 
 281         final RestfulResponse response = httpRest.head("path/to/service", parametes, options);
 
 282         assertEquals(HttpExchange.STATUS_COMPLETED, response.getStatus());
 
 290      * @throws ServiceException
 
 293     private HttpRest getHttpRest(final RestfulOptions options) throws ServiceException {
 
 294         final HttpRest httpRest = new HttpRest();
 
 296             new MockUp<HttpClient>() {
 
 299                 public void doStart() {
 
 303                 public void send(final HttpExchange exchange) throws IOException {
 
 306             httpRest.initHttpRest(options);
 
 319     public void testAsyncGetStringRestfulParametesRestfulAsyncCallback() throws Exception {
 
 320         final RestfulOptions options = new RestfulOptions();
 
 322         final HttpRest httpRest = getHttpRest(options);
 
 323         new MockUp<RestHttpContentExchange>() {
 
 326             public int waitForDone() {
 
 327                 return HttpExchange.STATUS_COMPLETED;
 
 331             public RestfulResponse getResponse() throws IOException {
 
 332                 final RestfulResponse response = new RestfulResponse();
 
 333                 response.setStatus(HttpExchange.STATUS_COMPLETED);
 
 339         final RestfulAsyncCallback callback = new RestfulAsyncCallback() {
 
 342             public void callback(final RestfulResponse response) {
 
 347             public void handleExcepion(final Throwable e) {
 
 352         httpRest.asyncGet("path/to/service", new RestfulParametes(), callback);
 
 353         httpRest.asyncGet("path/to/service", new RestfulParametes(), null);
 
 359      * @throws ServiceException
 
 363     public void testAsyncGetStringRestfulParametesRestfulOptionsRestfulAsyncCallback() throws ServiceException {
 
 364         final RestfulOptions options = new RestfulOptions();
 
 366         final HttpRest httpRest = getHttpRest(options);
 
 367         new MockUp<RestHttpContentExchange>() {
 
 370             public int waitForDone() {
 
 371                 return HttpExchange.STATUS_COMPLETED;
 
 375             public RestfulResponse getResponse() throws IOException {
 
 376                 final RestfulResponse response = new RestfulResponse();
 
 377                 response.setStatus(HttpExchange.STATUS_COMPLETED);
 
 383         final RestfulAsyncCallback callback = new RestfulAsyncCallback() {
 
 386             public void callback(final RestfulResponse response) {
 
 391             public void handleExcepion(final Throwable e) {
 
 396         httpRest.asyncGet("path/to/service", new RestfulParametes(), new RestfulOptions(), callback);
 
 397         httpRest.asyncGet("path/to/service", new RestfulParametes(), new RestfulOptions(), null);
 
 403      * @throws ServiceException
 
 407     public void testPutStringRestfulParametes() throws ServiceException {
 
 408         final RestfulOptions options = new RestfulOptions();
 
 410         final HttpRest httpRest = getHttpRest(options);
 
 411         new MockUp<RestHttpContentExchange>() {
 
 414             public int waitForDone() {
 
 415                 return HttpExchange.STATUS_COMPLETED;
 
 419             public RestfulResponse getResponse() throws IOException {
 
 420                 final RestfulResponse response = new RestfulResponse();
 
 421                 response.setStatus(HttpExchange.STATUS_COMPLETED);
 
 426         final RestfulParametes parametes = new RestfulParametes();
 
 427         parametes.put("id", "1234");
 
 428         parametes.put("name", "some-name");
 
 429         parametes.put("address", null);
 
 430         parametes.putHttpContextHeader("Content-Type", "");
 
 431         parametes.putHttpContextHeader("Accept-Encoding", "");
 
 432         final RestfulResponse response = httpRest.put("path/to/service", parametes);
 
 433         assertEquals(HttpExchange.STATUS_COMPLETED, response.getStatus());
 
 439      * @throws ServiceException
 
 443     public void testPutStringRestfulParametesRestfulOptions() throws ServiceException {
 
 445         final RestfulOptions options = new RestfulOptions();
 
 447         final HttpRest httpRest = getHttpRest(options);
 
 448         new MockUp<RestHttpContentExchange>() {
 
 451             public int waitForDone() {
 
 452                 return HttpExchange.STATUS_COMPLETED;
 
 456             public RestfulResponse getResponse() throws IOException {
 
 457                 final RestfulResponse response = new RestfulResponse();
 
 458                 response.setStatus(HttpExchange.STATUS_COMPLETED);
 
 463         final RestfulParametes parametes = new RestfulParametes();
 
 464         parametes.put("id", "1234");
 
 465         parametes.put("name", "some-name");
 
 466         parametes.put("address", null);
 
 467         parametes.putHttpContextHeader("Content-Type", "");
 
 468         parametes.putHttpContextHeader("Accept-Encoding", "");
 
 469         final RestfulResponse response = httpRest.put("path/to/service", parametes, null);
 
 470         assertEquals(HttpExchange.STATUS_COMPLETED, response.getStatus());
 
 476      * @throws ServiceException
 
 480     public void testAsyncPutStringRestfulParametesRestfulAsyncCallback() throws ServiceException {
 
 481         final RestfulOptions options = new RestfulOptions();
 
 483         final HttpRest httpRest = getHttpRest(options);
 
 484         new MockUp<RestHttpContentExchange>() {
 
 487             public int waitForDone() {
 
 488                 return HttpExchange.STATUS_COMPLETED;
 
 492             public RestfulResponse getResponse() throws IOException {
 
 493                 final RestfulResponse response = new RestfulResponse();
 
 494                 response.setStatus(HttpExchange.STATUS_COMPLETED);
 
 500         final RestfulAsyncCallback callback = new RestfulAsyncCallback() {
 
 503             public void callback(final RestfulResponse response) {
 
 508             public void handleExcepion(final Throwable e) {
 
 513         httpRest.asyncPut("path/to/service", new RestfulParametes(), callback);
 
 514         httpRest.asyncPut("path/to/service", new RestfulParametes(), null);
 
 524     public void testAsyncPutStringRestfulParametesRestfulOptionsRestfulAsyncCallback() throws Exception {
 
 525         final RestfulOptions options = new RestfulOptions();
 
 527         final HttpRest httpRest = getHttpRest(options);
 
 528         new MockUp<RestHttpContentExchange>() {
 
 531             public int waitForDone() {
 
 532                 return HttpExchange.STATUS_COMPLETED;
 
 536             public RestfulResponse getResponse() throws IOException {
 
 537                 final RestfulResponse response = new RestfulResponse();
 
 538                 response.setStatus(HttpExchange.STATUS_COMPLETED);
 
 544         final RestfulAsyncCallback callback = new RestfulAsyncCallback() {
 
 547             public void callback(final RestfulResponse response) {
 
 552             public void handleExcepion(final Throwable e) {
 
 557         httpRest.asyncPut("path/to/service", new RestfulParametes(), new RestfulOptions(), callback);
 
 558         httpRest.asyncPut("path/to/service", new RestfulParametes(), new RestfulOptions(), null);
 
 568     public void testAsyncPostStringRestfulParametesRestfulAsyncCallback() throws Exception {
 
 569         final RestfulOptions options = new RestfulOptions();
 
 570         options.setRestTimeout(10);
 
 572         final HttpBaseRest httpRest = getHttpRest(options);
 
 573         new MockUp<RestHttpContentExchange>() {
 
 576             public int waitForDone() {
 
 581             public RestfulResponse getResponse() throws IOException {
 
 582                 final RestfulResponse response = new RestfulResponse();
 
 583                 response.setStatus(HttpExchange.STATUS_EXCEPTED);
 
 589         final RestfulAsyncCallback callback = new RestfulAsyncCallback() {
 
 592             public void callback(final RestfulResponse response) {
 
 597             public void handleExcepion(final Throwable e) {
 
 602         httpRest.asyncPost("path/to/service", new RestfulParametes(), options, callback);
 
 603         httpRest.asyncPost("path/to/service", new RestfulParametes(), options, null);
 
 609      * @throws ServiceException
 
 613     public void testAsyncPostStringRestfulParametesRestfulOptionsRestfulAsyncCallback() throws ServiceException {
 
 614         final RestfulOptions options = new RestfulOptions();
 
 615         options.setRestTimeout(10);
 
 617         final HttpBaseRest httpRest = getHttpRest(options);
 
 618         new MockUp<RestHttpContentExchange>() {
 
 621             public int waitForDone() {
 
 622                 return HttpExchange.STATUS_COMPLETED;
 
 626             public RestfulResponse getResponse() throws IOException {
 
 627                 final RestfulResponse response = new RestfulResponse();
 
 628                 response.setStatus(HttpExchange.STATUS_COMPLETED);
 
 634         final RestfulAsyncCallback callback = new RestfulAsyncCallback() {
 
 637             public void callback(final RestfulResponse response) {
 
 642             public void handleExcepion(final Throwable e) {
 
 647         httpRest.asyncPost("path/to/service", new RestfulParametes(), options, callback);
 
 648         httpRest.asyncPost("path/to/service", new RestfulParametes(), options, null);
 
 654      * @throws ServiceException
 
 658     public void testDeleteStringRestfulParametes() throws ServiceException {
 
 659         final RestfulOptions options = new RestfulOptions();
 
 661         final HttpBaseRest httpRest = getHttpRest(options);
 
 663         final RestfulResponse response = httpRest.delete("path/to/service", null);
 
 664         assertEquals(-1, response.getStatus());
 
 670      * @throws ServiceException
 
 674     public void testDeleteStringRestfulParametesRestfulOptions() throws ServiceException {
 
 675         final RestfulOptions options = new RestfulOptions();
 
 677         final HttpBaseRest httpRest = getHttpRest(options);
 
 678         new MockUp<RestHttpContentExchange>() {
 
 681             public int waitForDone() {
 
 682                 return HttpExchange.STATUS_COMPLETED;
 
 686             public RestfulResponse getResponse() throws IOException {
 
 687                 final RestfulResponse response = new RestfulResponse();
 
 688                 response.setStatus(HttpExchange.STATUS_COMPLETED);
 
 693         final RestfulParametes parameters = new RestfulParametes();
 
 694         parameters.put("id", "1234");
 
 695         parameters.put("name", "some-name");
 
 696         parameters.put("address", null);
 
 697         parameters.setRawData("{ \"data\"=\"sample JSON data\"");
 
 698         parameters.putHttpContextHeader("Content-Type", "");
 
 699         parameters.putHttpContextHeader("Accept-Encoding", "");
 
 700         final RestfulResponse response = httpRest.delete("path/to/service", parameters, options);
 
 701         assertEquals(HttpExchange.STATUS_COMPLETED, response.getStatus());
 
 707      * @throws ServiceException
 
 711     public void testAsyncDeleteStringRestfulParametesRestfulAsyncCallback() throws ServiceException {
 
 712         final RestfulOptions options = new RestfulOptions();
 
 713         options.setRestTimeout(10);
 
 715         final HttpBaseRest httpRest = getHttpRest(options);
 
 716         new MockUp<RestHttpContentExchange>() {
 
 719             public int waitForDone() {
 
 720                 return HttpExchange.STATUS_COMPLETED;
 
 724             public RestfulResponse getResponse() throws IOException {
 
 725                 final RestfulResponse response = new RestfulResponse();
 
 726                 response.setStatus(HttpExchange.STATUS_COMPLETED);
 
 732         final RestfulAsyncCallback callback = new RestfulAsyncCallback() {
 
 735             public void callback(final RestfulResponse response) {
 
 740             public void handleExcepion(final Throwable e) {
 
 745         httpRest.asyncDelete("path/to/service", new RestfulParametes(), callback);
 
 746         httpRest.asyncDelete("path/to/service", new RestfulParametes(), null);
 
 752      * @throws ServiceException
 
 756     public void testAsyncDeleteStringRestfulParametesRestfulOptionsRestfulAsyncCallback() throws ServiceException {
 
 757         final RestfulOptions options = new RestfulOptions();
 
 758         options.setRestTimeout(10);
 
 760         final HttpBaseRest httpRest = getHttpRest(options);
 
 761         new MockUp<RestHttpContentExchange>() {
 
 764             public int waitForDone() {
 
 765                 return HttpExchange.STATUS_COMPLETED;
 
 769             public RestfulResponse getResponse() throws IOException {
 
 770                 final RestfulResponse response = new RestfulResponse();
 
 771                 response.setStatus(HttpExchange.STATUS_COMPLETED);
 
 777         final RestfulAsyncCallback callback = new RestfulAsyncCallback() {
 
 780             public void callback(final RestfulResponse response) {
 
 785             public void handleExcepion(final Throwable e) {
 
 790         httpRest.asyncDelete("path/to/service", new RestfulParametes(), options, callback);
 
 791         httpRest.asyncDelete("path/to/service", new RestfulParametes(), options, null);
 
 797      * @throws ServiceException
 
 801     public void testPatchStringRestfulParametes() throws ServiceException {
 
 802         final RestfulOptions options = new RestfulOptions();
 
 804         final HttpBaseRest httpRest = getHttpRest(options);
 
 805         new MockUp<RestHttpContentExchange>() {
 
 808             public int waitForDone() {
 
 809                 return HttpExchange.STATUS_COMPLETED;
 
 813             public RestfulResponse getResponse() throws IOException {
 
 814                 final RestfulResponse response = new RestfulResponse();
 
 815                 response.setStatus(HttpExchange.STATUS_COMPLETED);
 
 820         final RestfulParametes parameters = new RestfulParametes();
 
 821         parameters.put("id", "1234");
 
 822         parameters.put("name", "some-name");
 
 823         parameters.put("address", null);
 
 824         parameters.setRawData("{ \"data\"=\"sample JSON data\"");
 
 825         parameters.putHttpContextHeader("Content-Type", "");
 
 826         parameters.putHttpContextHeader("Accept-Encoding", "");
 
 827         final RestfulResponse response = httpRest.patch("path/to/service", parameters);
 
 828         assertEquals(HttpExchange.STATUS_COMPLETED, response.getStatus());
 
 834      * @throws ServiceException
 
 838     public void testPatchStringRestfulParametesRestfulOptions() throws ServiceException {
 
 839         final RestfulOptions options = new RestfulOptions();
 
 841         final HttpBaseRest httpRest = getHttpRest(options);
 
 842         new MockUp<RestHttpContentExchange>() {
 
 845             public int waitForDone() {
 
 846                 return HttpExchange.STATUS_COMPLETED;
 
 850             public RestfulResponse getResponse() throws IOException {
 
 851                 final RestfulResponse response = new RestfulResponse();
 
 852                 response.setStatus(HttpExchange.STATUS_COMPLETED);
 
 857         final RestfulParametes parameters = new RestfulParametes();
 
 858         parameters.put("id", "1234");
 
 859         parameters.put("name", "some-name");
 
 860         parameters.put("address", null);
 
 861         parameters.setRawData("{ \"data\"=\"sample JSON data\"");
 
 862         parameters.putHttpContextHeader("Content-Type", "");
 
 863         parameters.putHttpContextHeader("Accept-Encoding", "");
 
 864         final RestfulResponse response = httpRest.patch("path/to/service", parameters, options);
 
 865         assertEquals(HttpExchange.STATUS_COMPLETED, response.getStatus());
 
 871      * @throws ServiceException
 
 875     public void testAsyncPatchStringRestfulParametesRestfulAsyncCallback() throws ServiceException {
 
 876         final RestfulOptions options = new RestfulOptions();
 
 877         options.setRestTimeout(10);
 
 879         final HttpBaseRest httpRest = getHttpRest(options);
 
 880         new MockUp<RestHttpContentExchange>() {
 
 883             public int waitForDone() {
 
 884                 return HttpExchange.STATUS_COMPLETED;
 
 888             public RestfulResponse getResponse() throws IOException {
 
 889                 final RestfulResponse response = new RestfulResponse();
 
 890                 response.setStatus(HttpExchange.STATUS_COMPLETED);
 
 896         final RestfulAsyncCallback callback = new RestfulAsyncCallback() {
 
 899             public void callback(final RestfulResponse response) {
 
 904             public void handleExcepion(final Throwable e) {
 
 909         httpRest.asyncPatch("path/to/service", new RestfulParametes(), callback);
 
 910         httpRest.asyncPatch("path/to/service", new RestfulParametes(), null);
 
 916      * @throws ServiceException
 
 920     public void testAsyncPatchStringRestfulParametesRestfulOptionsRestfulAsyncCallback() throws ServiceException {
 
 921         final RestfulOptions options = new RestfulOptions();
 
 922         options.setRestTimeout(10);
 
 924         final HttpBaseRest httpRest = getHttpRest(options);
 
 925         new MockUp<RestHttpContentExchange>() {
 
 928             public int waitForDone() {
 
 929                 return HttpExchange.STATUS_COMPLETED;
 
 933             public RestfulResponse getResponse() throws IOException {
 
 934                 final RestfulResponse response = new RestfulResponse();
 
 935                 response.setStatus(HttpExchange.STATUS_COMPLETED);
 
 941         final RestfulAsyncCallback callback = new RestfulAsyncCallback() {
 
 944             public void callback(final RestfulResponse response) {
 
 949             public void handleExcepion(final Throwable e) {
 
 954         httpRest.asyncPatch("path/to/service", new RestfulParametes(), options, callback);
 
 955         httpRest.asyncPatch("path/to/service", new RestfulParametes(), options, null);