package com.yahoo.vespa.hosted.controller.restapi;
import com.yahoo.application.container.handler.Request;
import com.yahoo.config.provision.SystemName;
import com.yahoo.vespa.hosted.controller.api.role.Role;
import com.yahoo.vespa.hosted.controller.api.role.SecurityContext;
import com.yahoo.vespa.hosted.controller.api.role.SimplePrincipal;
import java.nio.charset.StandardCharsets;
import java.security.Principal;
import java.util.Set;
import java.util.function.Supplier;
/**
* Controller container test with services.xml which accommodates cloud user management.
*
* @author jonmv
*/
public class ControllerContainerCloudTest extends ControllerContainerTest {
@Override
protected SystemName system() {
return SystemName.Public;
}
@Override
protected String variablePartXml() {
return " \n" +
" \n" +
" \n" +
" \n" +
" http://*/application/v4/*\n" +
" http://*/api/application/v4/*\n" +
" \n" +
" \n" +
" http://*/zone/v1\n" +
" http://*/zone/v1/*\n" +
" http://*/api/zone/v1\n" +
" http://*/api/zone/v1/*\n" +
" \n" +
" \n" +
" http://*/user/v1/*\n" +
" http://*/api/user/v1/*\n" +
" \n" +
" \n" +
" \n" +
" \n" +
" \n" +
" \n" +
" http://*/*\n" +
" \n" +
" \n" +
" \n";
}
protected static final String accessDenied = "{\n" +
" \"code\" : 403,\n" +
" \"message\" : \"Access denied\"\n" +
"}";
protected RequestBuilder request(String path) { return new RequestBuilder(path, Request.Method.GET); }
protected RequestBuilder request(String path, Request.Method method) { return new RequestBuilder(path, method); }
protected class RequestBuilder implements Supplier {
private final String path;
private final Request.Method method;
private byte[] data = new byte[0];
private Principal user = () -> "user@test";
private Set roles = Set.of(Role.everyone());
private RequestBuilder(String path, Request.Method method) {
this.path = path;
this.method = method;
}
public RequestBuilder data(byte[] data) { this.data = data; return this; }
public RequestBuilder data(String data) { this.data = data.getBytes(StandardCharsets.UTF_8); return this; }
public RequestBuilder user(String user) { this.user = new SimplePrincipal(user); return this; }
public RequestBuilder roles(Set roles) { this.roles = roles; return this; }
@Override
public Request get() {
Request request = new Request("http://localhost:8080" + path, data, method, user);
request.getAttributes().put(SecurityContext.ATTRIBUTE_NAME, new SecurityContext(user, roles));
request.getHeaders().put("Content-Type", "application/json");
return request;
}
}
}