public class SslConfiguration {
public static RestAssuredConfig getP12Config() {
return RestAssuredConfig.config()
.sslConfig(new SSLConfig()
.keyStore(
AuthConfiguration.CERTIFICATE_PATH,
AuthConfiguration.CERTIFICATE_PASSWORD)
.keystoreType("PKCS12")
.relaxedHTTPSValidation())
.redirect(RedirectConfig.redirectConfig()
.followRedirects(false)
.allowCircularRedirects(true)
.maxRedirects(1));
}
}
public void testWithSsl(RestService restService) {
// System.setProperty("javax.net.debug", "ssl,handshake");
RestAssuredConfig sslConfig = SslConfiguration.getP12Config();
java.util.Map<String, String> cookies = new java.util.HashMap<>();
String currentUrl = AuthConfiguration.AUTH_URL;
System.out.println("========= Start auth =========");
for (int i = 1; i <= 5; i++) {
Response response = restService.restClient()
.get(spec -> spec
.config(sslConfig)
.contentType("application/json;charset=UTF-8")
.cookies(cookies)
.redirects().follow(false)
.urlEncodingEnabled(false),
currentUrl)
.toResponse();
String locationHeader = response.getHeader("Location");
if (locationHeader == null || locationHeader.isEmpty()) {
response.then().log().all();
break;
}
currentUrl = toAbsoluteUrl(locationHeader, currentUrl);
response.getDetailedCookies().forEach(cookie -> cookies.put(cookie.getName(), cookie.getValue()));
}
System.out.println("========= End auth =========");
}
private String toAbsoluteUrl(String location, String baseUrl) {
if (location.startsWith("http://") || location.startsWith("https://")) {
return location;
}
return URI.create(baseUrl).resolve(location).toString();
}
public class CertificateLoader {
private CertificateLoader() {}
public static KeyStore load() {
try {
InputStream is = Files.newInputStream(
Paths.get(AuthConfiguration.CERTIFICATE_PATH));
KeyStore keyStore = KeyStore.getInstance("PKCS12");
keyStore.load(is, AuthConfiguration.CERTIFICATE_PASSWORD.toCharArray());
return keyStore;
} catch (Exception e) {
throw new AuthException("Не могу загрузить сертификат, ошибка: ", e);
}
}
}
.
├── AuthClient.java
├── AuthConfiguration.java
├── AuthException.java
├── AuthService.java
├── CertificateLoader.java
└── CookieHolder.java
я тут архитектуру для тестов на бэк делаю, работать они буду в несколько потоков, выше получение куки, ее буду подкладывать во все запросы, получать ее хочу единожды перед всеми тестами. помоги раскидать всё по классам. и куда папку с ними(auth)? main-java? это своего рода beforeAll будет, хызы как оформить