Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save xexes/0b4470f7be794f170846ad6451cff91d to your computer and use it in GitHub Desktop.
Save xexes/0b4470f7be794f170846ad6451cff91d to your computer and use it in GitHub Desktop.
IMDS + Wiremock
package io.awspring.cloud.autoconfigure.imds;
import java.net.URI;
import com.github.tomakehurst.wiremock.WireMockServer;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import software.amazon.awssdk.imds.Ec2MetadataClient;
import static com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder.responseDefinition;
import static com.github.tomakehurst.wiremock.client.WireMock.get;
import static com.github.tomakehurst.wiremock.client.WireMock.getRequestedFor;
import static com.github.tomakehurst.wiremock.client.WireMock.put;
import static com.github.tomakehurst.wiremock.client.WireMock.putRequestedFor;
import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options;
import static org.assertj.core.api.Assertions.assertThat;
class ImdsUtilsIntegrationTests {
private WireMockServer wireMockServer = new WireMockServer(options().dynamicPort());
private ImdsUtils imdsUtils;
@BeforeEach
void init() {
wireMockServer.start();
imdsUtils = new ImdsUtils(Ec2MetadataClient.builder()
.endpoint(URI.create(wireMockServer.baseUrl()))
.build());
}
@AfterEach
void stop() {
wireMockServer.stop();
}
@Test
void foo() {
// stub metadata responses with as most realistic data as possible:
wireMockServer.stubFor(put(urlEqualTo("/latest/api/token")).willReturn(
responseDefinition().withHeader("x-aws-ec2-metadata-token-ttl-seconds", "100").withBody("a-token")));
wireMockServer.stubFor(get(urlEqualTo("/latest/meta-data/ami-id")).willReturn(
responseDefinition().withBody("sample-ami-id")));
assertThat(imdsUtils.isRunningOnCloudEnvironment()).isTrue();
// optionally, where makes sense you can also verify if correct requests were sent:
wireMockServer.verify(putRequestedFor(urlEqualTo("/latest/api/token")));
wireMockServer.verify(getRequestedFor(urlEqualTo("/latest/meta-data/ami-id")));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment