| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.apache.camel.quarkus.component.digitalocean.it; |
| |
| import java.util.List; |
| import java.util.Map; |
| import java.util.Optional; |
| |
| import com.github.tomakehurst.wiremock.WireMockServer; |
| import io.quarkus.test.common.QuarkusTestResource; |
| import io.quarkus.test.junit.QuarkusTest; |
| import io.restassured.RestAssured; |
| import io.restassured.http.ContentType; |
| import org.apache.camel.quarkus.test.wiremock.MockServer; |
| import org.hamcrest.CoreMatchers; |
| import org.junit.jupiter.api.BeforeAll; |
| import org.junit.jupiter.api.Test; |
| |
| import static io.restassured.RestAssured.given; |
| import static org.hamcrest.Matchers.equalTo; |
| import static org.hamcrest.Matchers.notNullValue; |
| import static org.junit.jupiter.api.Assertions.assertNotNull; |
| import static org.junit.jupiter.api.Assertions.assertTrue; |
| |
| @SuppressWarnings("unchecked") |
| @QuarkusTest |
| @QuarkusTestResource(DigitaloceanTestResource.class) |
| class DigitaloceanTest { |
| static String publicKey; |
| @MockServer |
| WireMockServer server; |
| |
| @BeforeAll |
| public static void initPublicKey() { |
| String key = System.getenv("DIGITALOCEAN_PUBLIC_KEY"); |
| if (key != null) { |
| publicKey = key; |
| } else { |
| publicKey = "ssh-rsa AEXAMPLEaC1yc2EAAAADAQABAAAAQQDDHr/jh2Jy4yALcK4JyWbVkPRaWmhck3IgCoeOO3z1e2dBowLh64QAM+Qb72pxekALga2oi4GvT+TlWNhzPH4V example"; |
| } |
| } |
| |
| @Test |
| void testAccount() { |
| given() |
| .when() |
| .get("/digitalocean/account/") |
| .then() |
| .body("uuid", notNullValue()); |
| } |
| |
| @Test |
| void testSizes() { |
| List<Map<String, Object>> sizes = RestAssured.given().contentType(ContentType.JSON) |
| .get("/digitalocean/sizes") |
| .then().extract().body().as(List.class); |
| assertNotNull(sizes); |
| Optional<Map<String, Object>> size_1Gb = sizes.stream() |
| .filter(s -> "s-1vcpu-1gb".equals(s.get("slug"))) |
| .findFirst(); |
| assertTrue(size_1Gb.isPresent()); |
| } |
| |
| @Test |
| void testRegions() { |
| List<Map<String, Object>> regions = RestAssured.given().contentType(ContentType.JSON) |
| .get("/digitalocean/regions") |
| .then().extract().body().as(List.class); |
| assertNotNull(regions); |
| Optional<Map<String, Object>> nyc1Region = regions.stream() |
| .filter(r -> "nyc1".equals(r.get("slug"))) |
| .findFirst(); |
| assertTrue(nyc1Region.isPresent()); |
| } |
| |
| @Test |
| void testKeys() { |
| // create a key |
| String name = "TestKey1"; |
| |
| Integer publicKeyId = given() |
| .contentType(ContentType.JSON) |
| .body(publicKey) |
| .put("/digitalocean/keys/" + name) |
| .then().extract().body().as(Integer.class); |
| |
| // get the key |
| given() |
| .contentType(ContentType.JSON) |
| .get("/digitalocean/keys/" + publicKeyId) |
| .then() |
| .body("id", equalTo(publicKeyId)) |
| .body("name", equalTo(name)); |
| |
| // update key |
| name = "updated_TestKey1"; |
| given() |
| .contentType(ContentType.JSON) |
| .body(name) |
| .post("/digitalocean/keys/" + publicKeyId) |
| .then() |
| .body("id", equalTo(publicKeyId)) |
| .body("name", equalTo(name)); |
| |
| // List keys |
| List<Map<String, Object>> keys = given() |
| .get("/digitalocean/keys") |
| .then().extract().body().as(List.class); |
| Optional<Map<String, Object>> resultKey = keys.stream() |
| .filter(m -> publicKeyId.equals(m.get("id"))) |
| .findAny(); |
| assertTrue(resultKey.isPresent()); |
| |
| // delete the key |
| given() |
| .delete("/digitalocean/keys/" + publicKeyId) |
| .then() |
| .body("isRequestSuccess", CoreMatchers.equalTo(true)); |
| |
| } |
| |
| @Test |
| void testTags() { |
| // create a tag |
| String name = "awesome"; |
| given() |
| .contentType(ContentType.JSON) |
| .post("/digitalocean/tags/" + name) |
| .then() |
| .body("name", equalTo(name)); |
| |
| // get a tag |
| given() |
| .get("/digitalocean/tags/" + name) |
| .then() |
| .body("name", equalTo(name)); |
| |
| // get all tags |
| List<Map<String, Object>> tags = given() |
| .contentType(ContentType.JSON) |
| .get("/digitalocean/tags/") |
| .then().extract().body().as(List.class); |
| Optional<Map<String, Object>> resultKey = tags.stream() |
| .filter(t -> name.equals(t.get("name"))) |
| .findAny(); |
| assertTrue(resultKey.isPresent()); |
| |
| // delete the tag |
| given() |
| .delete("/digitalocean/tags/" + name) |
| .then() |
| .body("isRequestSuccess", CoreMatchers.equalTo(true)); |
| |
| } |
| } |