/** * Set a specific header * * @return The builder */ public ResponseBuilder setHeader(String name, String value) { notNull(name, "Header name"); notNull(value, "Header value"); List<Header> newHeaders = new ArrayList<Header>(restAssuredResponse.headers().asList()); newHeaders.add(new Header(name, value)); restAssuredResponse.setResponseHeaders(new Headers(newHeaders)); if (trim(name).equalsIgnoreCase(CONTENT_TYPE)) { restAssuredResponse.setContentType(value); } return this; }
@Test @RunAsClient @InSequence(19) public void testApplicationMetadataItems() { Header wantJson = new Header("Accept", APPLICATION_JSON); JsonPath jsonPath = given().header(wantJson).options("/metrics/application").jsonPath(); Map<String, Object> elements = jsonPath.getMap("."); List<String> missing = new ArrayList<>(); Map<String, MiniMeta> names = getExpectedMetadataFromXmlFile(MetricRegistry.Type.APPLICATION); for (String item : names.keySet()) { if (!elements.containsKey(item)) { missing.add(item); } } assertTrue("Following application items are missing: " + Arrays.toString(missing.toArray()), missing.isEmpty()); }
@Test @RunAsClient @InSequence(8) public void testBaseSingularMetricsPresent() { Header wantJson = new Header("Accept", APPLICATION_JSON); JsonPath jsonPath = given().header(wantJson).get("/metrics/base").jsonPath(); Map<String, Object> elements = jsonPath.getMap("."); List<String> missing = new ArrayList<>(); Map<String, MiniMeta> baseNames = getExpectedMetadataFromXmlFile(MetricRegistry.Type.BASE); for (String item : baseNames.keySet()) { if (item.startsWith("gc.")) { continue; } if (!elements.containsKey(item) && !baseNames.get(item).optional) { missing.add(item); } } assertTrue("Following base items are missing: " + Arrays.toString(missing.toArray()), missing.isEmpty()); }
@Test @RunAsClient @InSequence(11) public void testBaseMetadataSingluarItems() { Header wantJson = new Header("Accept", APPLICATION_JSON); JsonPath jsonPath = given().header(wantJson).options("/metrics/base").jsonPath(); Map<String, Object> elements = jsonPath.getMap("."); List<String> missing = new ArrayList<>(); Map<String, MiniMeta> baseNames = getExpectedMetadataFromXmlFile(MetricRegistry.Type.BASE); for (String item : baseNames.keySet()) { if (item.startsWith("gc.") || baseNames.get(item).optional) { continue; } if (!elements.containsKey(item)) { missing.add(item); } } assertTrue("Following base items are missing: " + Arrays.toString(missing.toArray()), missing.isEmpty()); }
@Test @RunAsClient @InSequence(4) public void testListsAllJson() { Header acceptHeader = new Header("Accept", APPLICATION_JSON); Map response = given().header(acceptHeader).when().get("/metrics").as(Map.class); // all servers should have some base metrics assertTrue(response.containsKey("base")); // There may be application metrics, so check if the key exists and bail if it has no data if (response.containsKey("application")) { Map applicationData = (Map) response.get("application"); assertThat(applicationData.size(), greaterThan(0)); } // There may be vendor metrics, so check if the key exists and bail if it has no data if (response.containsKey("vendor")) { Map vendorData = (Map) response.get("vendor"); assertThat(vendorData.size(), greaterThan(0)); } }
@Test @RunAsClient @InSequence(15) public void testBaseMetadataGarbageCollection() throws Exception { Header wantJson = new Header("Accept", APPLICATION_JSON); JsonPath jsonPath = given().header(wantJson).options("/metrics/base").jsonPath(); int count = 0; Map<String, Object> elements = jsonPath.getMap("."); for (String name : elements.keySet()) { if (name.startsWith("gc.")) { assertTrue(name.endsWith(".count") || name.endsWith(".time")); count++; } } assertThat(count, greaterThan(0)); }
@Test @RunAsClient @InSequence(13) public void testPrometheusFormatNoBadChars() throws Exception { Header wantPrometheusFormat = new Header("Accept", TEXT_PLAIN); String data = given().header(wantPrometheusFormat).get("/metrics/base").asString(); String[] lines = data.split("\n"); for (String line : lines) { if (line.startsWith("#")) { continue; } String[] tmp = line.split(" "); assertEquals(tmp.length, 2); assertFalse("Line has illegal chars " + line, tmp[0].matches("[-.]")); assertFalse("Found __ in " + line, tmp[0].matches("__")); } }
@Test @RunAsClient @InSequence(31) public void testOptionalBaseMetrics() { Header wantJson = new Header("Accept", APPLICATION_JSON); JsonPath jsonPath = given().header(wantJson).options("/metrics/base").jsonPath(); Map<String, Object> elements = jsonPath.getMap("."); Map<String, MiniMeta> names = getExpectedMetadataFromXmlFile(MetricRegistry.Type.BASE); for (String item : names.keySet()) { if (elements.containsKey(item) && names.get(item).optional) { String prefix = names.get(item).name; String type = "\""+prefix+"\""+".type"; String unit= "\""+prefix+"\""+".unit"; given().header(wantJson).options("/metrics/base/"+prefix).then().statusCode(200) .body(type, equalTo(names.get(item).type)) .body(unit, equalTo(names.get(item).unit)); } } }
@Test @RunAsClient @InSequence(2) public void testSharedCounter() { Header acceptJson = new Header("Accept", APPLICATION_JSON); given().header(acceptJson).get("/metrics/application").then() .assertThat().body("countMe2", equalTo(1)) .assertThat().body("'org.eclipse.microprofile.metrics.test.MetricAppBean2.meterMe2'.count", equalTo(1)) .assertThat().body("timeMe2.count", equalTo(1)); }
@Test @RunAsClient @InSequence(4) public void testSharedCounterAgain() { Header acceptJson = new Header("Accept", APPLICATION_JSON); given().header(acceptJson).get("/metrics/application").then() .assertThat().body("countMe2", equalTo(2)) .assertThat().body("'org.eclipse.microprofile.metrics.test.MetricAppBean2.meterMe2'.count", equalTo(2)) .assertThat().body("timeMe2.count", equalTo(2)); }
@Test @RunAsClient @InSequence(6) public void testReusedHistogram() { Header acceptJson = new Header("Accept", APPLICATION_JSON); given().header(acceptJson).get("/metrics/application").then() .assertThat().body("reusableHisto.count", equalTo(2)) .assertThat().body("reusableHisto.min", equalTo(1)) .assertThat().body("reusableHisto.max", equalTo(3)); }
@Test @RunAsClient @InSequence(29) public void testNonStandardUnitsJSON() { Header wantJSONFormat = new Header("Accept", APPLICATION_JSON); given().header(wantJSONFormat).options("/metrics/application/jellybeanHistogram").then().statusCode(200) .body("jellybeanHistogram.unit", equalTo("jellybeans")); }
@Test @RunAsClient @InSequence(28) public void testConvertingToBaseUnit() { Header wantPrometheusFormat = new Header("Accept", TEXT_PLAIN); given().header(wantPrometheusFormat).get("/metrics/application").then().statusCode(200) .and().body(containsString("TYPE application:org_eclipse_microprofile_metrics_test_metric_app_bean_gauge_me_a_bytes gauge")) .and().body(containsString("TYPE application:metric_test_test1_gauge_bytes gauge")); }
@Test @RunAsClient @InSequence(16) public void testApplicationMetadataOkJson() { Header wantJson = new Header("Accept", APPLICATION_JSON); Response response = given().header(wantJson).options("/metrics/application"); int code = response.getStatusCode(); assertTrue(code == 200 || code == 204); }
@Test @RunAsClient @InSequence(7) public void testBaseAttributeJson() { Header wantJson = new Header("Accept", APPLICATION_JSON); given().header(wantJson).when().get("/metrics/base/thread.max.count").then().statusCode(200).and() .contentType(MpMetricTest.APPLICATION_JSON).and().body(containsString("thread.max.count")); }
@Test @RunAsClient @InSequence(10) public void testBaseMetadata() { Header wantJson = new Header("Accept", APPLICATION_JSON); given().header(wantJson).options("/metrics/base").then().statusCode(200).and() .contentType(MpMetricTest.APPLICATION_JSON); }
@Test @RunAsClient @InSequence(20) public void testApplicationMetadataTypeAndUnit() { Header wantJson = new Header("Accept", APPLICATION_JSON); JsonPath jsonPath = given().header(wantJson).options("/metrics/application").jsonPath(); Map<String, Map<String, Object>> elements = jsonPath.getMap("."); Map<String, MiniMeta> expectedMetadata = getExpectedMetadataFromXmlFile(MetricRegistry.Type.APPLICATION); checkMetadataPresent(elements, expectedMetadata); }
@Test @RunAsClient @InSequence(12) public void testBaseMetadataTypeAndUnit() { Header wantJson = new Header("Accept", APPLICATION_JSON); JsonPath jsonPath = given().header(wantJson).options("/metrics/base").jsonPath(); Map<String, Map<String, Object>> elements = jsonPath.getMap("."); Map<String, MiniMeta> expectedMetadata = getExpectedMetadataFromXmlFile(MetricRegistry.Type.BASE); checkMetadataPresent(elements, expectedMetadata); }
@Test @RunAsClient @InSequence(2) public void testTextPlainResponseContentType() { Header acceptHeader = new Header("Accept", TEXT_PLAIN); given().header(acceptHeader).when().get("/metrics").then().statusCode(200).and().contentType(TEXT_PLAIN); }
@Test @RunAsClient @InSequence(1) public void testApplicationJsonResponseContentType() { Header acceptHeader = new Header("Accept", APPLICATION_JSON); given().header(acceptHeader).when().get("/metrics").then().statusCode(200).and().contentType(APPLICATION_JSON); }