blob: 05784586241ebeabd19d9173b6cb7711456d5a21 [file] [log] [blame]
/*
* 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));
}
}