// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller.restapi.horizon; import com.yahoo.config.provision.SystemName; import com.yahoo.config.provision.TenantName; import com.yahoo.vespa.flags.Flags; import com.yahoo.vespa.flags.InMemoryFlagSource; import com.yahoo.vespa.hosted.controller.api.role.Role; import com.yahoo.vespa.hosted.controller.restapi.ContainerTester; import com.yahoo.vespa.hosted.controller.restapi.ControllerContainerCloudTest; import org.junit.jupiter.api.Test; import java.util.Set; /** * @author olaa */ public class HorizonApiTest extends ControllerContainerCloudTest { @Test void only_operators_and_flag_enabled_tenants_allowed() { ContainerTester tester = new ContainerTester(container, ""); TenantName tenantName = TenantName.defaultName(); tester.assertResponse(request("/horizon/v1/config/dashboard/topFolders") .roles(Set.of(Role.hostedOperator())), "", 200); tester.assertResponse(request("/horizon/v1/config/dashboard/topFolders") .roles(Set.of(Role.reader(tenantName))), "{\"error-code\":\"FORBIDDEN\",\"message\":\"No tenant with enabled metrics view\"}", 403); ((InMemoryFlagSource) tester.controller().flagSource()) .withBooleanFlag(Flags.ENABLED_HORIZON_DASHBOARD.id(), true); tester.assertResponse(request("/horizon/v1/config/dashboard/topFolders") .roles(Set.of(Role.reader(tenantName))), "", 200); } @Override protected SystemName system() { return SystemName.PublicCd; } @Override protected String variablePartXml() { return " \n" + " \n" + " \n" + " http://*/horizon/v1/*\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " http://*/*\n" + " \n" + " \n" + " \n"; } }