+++ /dev/null
-/*
- * SonarQube
- * Copyright (C) 2009-2017 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.sonar.server.license.ws;
-
-import org.sonar.api.server.ws.WebService;
-
-import static org.sonarqube.ws.client.license.LicensesWsParameters.CONTROLLER_SETTINGS;
-
-public class LicensesWs implements WebService {
-
- private final ListAction listAction;
-
- public LicensesWs(ListAction listAction) {
- this.listAction = listAction;
- }
-
- @Override
- public void define(Context context) {
- NewController controller = context.createController(CONTROLLER_SETTINGS)
- .setDescription("Manage licenses")
- .setSince("6.1");
- listAction.define(controller);
- controller.done();
- }
-}
+++ /dev/null
-/*
- * SonarQube
- * Copyright (C) 2009-2017 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.sonar.server.license.ws;
-
-import org.sonar.core.platform.Module;
-
-public class LicensesWsModule extends Module {
- @Override
- protected void configureModule() {
- add(
- LicensesWs.class,
- ListAction.class);
- }
-}
+++ /dev/null
-/*
- * SonarQube
- * Copyright (C) 2009-2017 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.sonar.server.license.ws;
-
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.Set;
-import java.util.function.Function;
-import javax.annotation.Nullable;
-import org.sonar.api.config.License;
-import org.sonar.api.config.PropertyDefinition;
-import org.sonar.api.config.PropertyDefinitions;
-import org.sonar.api.server.ws.Request;
-import org.sonar.api.server.ws.Response;
-import org.sonar.api.server.ws.WebService;
-import org.sonar.core.util.stream.MoreCollectors;
-import org.sonar.db.DbClient;
-import org.sonar.db.DbSession;
-import org.sonar.server.setting.ws.Setting;
-import org.sonar.server.setting.ws.SettingsFinder;
-import org.sonar.server.user.UserSession;
-import org.sonar.server.ws.WsAction;
-import org.sonarqube.ws.Licenses;
-import org.sonarqube.ws.Licenses.ListWsResponse;
-
-import static com.google.common.base.Strings.isNullOrEmpty;
-import static org.sonar.api.CoreProperties.PERMANENT_SERVER_ID;
-import static org.sonar.api.PropertyType.LICENSE;
-import static org.sonar.core.util.stream.MoreCollectors.uniqueIndex;
-import static org.sonar.server.ws.WsUtils.writeProtobuf;
-import static org.sonarqube.ws.client.license.LicensesWsParameters.ACTION_LIST;
-
-public class ListAction implements WsAction {
-
- private static final String ALL_SERVERS_VALUE = "*";
-
- private final UserSession userSession;
- private final PropertyDefinitions definitions;
- private final DbClient dbClient;
- private final SettingsFinder settingsFinder;
-
- public ListAction(UserSession userSession, PropertyDefinitions definitions, DbClient dbClient, SettingsFinder settingsFinder) {
- this.userSession = userSession;
- this.definitions = definitions;
- this.dbClient = dbClient;
- this.settingsFinder = settingsFinder;
- }
-
- @Override
- public void define(WebService.NewController context) {
- context.createAction(ACTION_LIST)
- .setDescription("List licenses settings.<br>" +
- "Requires 'Administer System' permission")
- .setResponseExample(getClass().getResource("list-example.json"))
- .setSince("6.1")
- .setInternal(true)
- .setHandler(this);
- }
-
- @Override
- public void handle(Request request, Response response) throws Exception {
- userSession.checkIsSystemAdministrator();
-
- try (DbSession dbSession = dbClient.openSession(true)) {
- writeProtobuf(doHandle(dbSession), request, response);
- }
- }
-
- private ListWsResponse doHandle(DbSession dbSession) {
- Map<String, PropertyDefinition> licenseDefinitionsByKeys = definitions.getAll().stream()
- .filter(definition -> LICENSE.equals(definition.type()))
- .collect(MoreCollectors.uniqueIndex(PropertyDefinition::key, Function.identity()));
- Set<String> settingsKeys = new HashSet<>(licenseDefinitionsByKeys.keySet());
- settingsKeys.add(PERMANENT_SERVER_ID);
- List<Setting> settings = settingsFinder.loadGlobalSettings(dbSession, settingsKeys);
- return new ListResponseBuilder(licenseDefinitionsByKeys, settings).build();
- }
-
- private static class ListResponseBuilder {
- private final Optional<String> serverId;
- private final Map<String, Setting> licenseSettingsByKey;
- private final Collection<PropertyDefinition> licenseDefinitions;
-
- ListResponseBuilder(Map<String, PropertyDefinition> licenseDefinitionsByKeys, List<Setting> settings) {
- this.serverId = getServerId(settings);
- this.licenseDefinitions = licenseDefinitionsByKeys.values();
- this.licenseSettingsByKey = settings.stream().collect(uniqueIndex(Setting::getKey, Function.identity()));
- }
-
- ListWsResponse build() {
- ListWsResponse.Builder wsResponse = ListWsResponse.newBuilder();
- licenseDefinitions.forEach(def -> wsResponse.addLicenses(buildLicense(def, licenseSettingsByKey.get(def.key()))));
- return wsResponse.build();
- }
-
- private Licenses.License buildLicense(PropertyDefinition definition, @Nullable Setting setting) {
- Licenses.License.Builder licenseBuilder = Licenses.License.newBuilder()
- .setKey(definition.key());
- String name = definition.name();
- if (!isNullOrEmpty(name)) {
- licenseBuilder.setName(name);
- }
- if (setting != null) {
- License license = License.readBase64(setting.getValue());
- licenseBuilder.setValue(setting.getValue());
- setProduct(licenseBuilder, license, setting);
- setOrganization(licenseBuilder, license);
- setExpiration(licenseBuilder, license);
- setServerId(licenseBuilder, license);
- setType(licenseBuilder, license);
- setAdditionalProperties(licenseBuilder, license);
- }
- return licenseBuilder.build();
- }
-
- private static void setProduct(Licenses.License.Builder licenseBuilder, License license, Setting setting) {
- String product = license.getProduct();
- if (product != null) {
- licenseBuilder.setProduct(product);
- }
- if (product == null || !setting.getKey().contains(product)) {
- licenseBuilder.setInvalidProduct(true);
- }
- }
-
- private static void setOrganization(Licenses.License.Builder licenseBuilder, License license) {
- String licenseOrganization = license.getOrganization();
- if (licenseOrganization != null) {
- licenseBuilder.setOrganization(licenseOrganization);
- }
- }
-
- private void setServerId(Licenses.License.Builder licenseBuilder, License license) {
- String licenseServerId = license.getServer();
- if (licenseServerId != null) {
- licenseBuilder.setServerId(licenseServerId);
- }
- boolean isValidServerId = Objects.equals(licenseServerId, ALL_SERVERS_VALUE)
- || (serverId.isPresent() && Objects.equals(licenseServerId, serverId.get()));
- if (!isValidServerId) {
- licenseBuilder.setInvalidServerId(true);
- }
- }
-
- private static void setExpiration(Licenses.License.Builder licenseBuilder, License license) {
- String expiration = license.getExpirationDateAsString();
- if (expiration != null) {
- licenseBuilder.setExpiration(expiration);
- }
- if (license.isExpired()) {
- licenseBuilder.setInvalidExpiration(true);
- }
- }
-
- private static void setType(Licenses.License.Builder licenseBuilder, License license) {
- String type = license.getType();
- if (type != null) {
- licenseBuilder.setType(type);
- }
- }
-
- private static void setAdditionalProperties(Licenses.License.Builder licenseBuilder, License license) {
- Map<String, String> additionalProperties = license.additionalProperties();
- if (!additionalProperties.isEmpty()) {
- licenseBuilder.getAdditionalPropertiesBuilder().putAllAdditionalProperties(additionalProperties).build();
- }
- }
-
- private static Optional<String> getServerId(List<Setting> settings) {
- Optional<Setting> setting = settings.stream().filter(s -> s.getKey().equals(PERMANENT_SERVER_ID)).findFirst();
- return setting.isPresent() ? Optional.of(setting.get().getValue()) : Optional.empty();
- }
- }
-}
+++ /dev/null
-/*
- * SonarQube
- * Copyright (C) 2009-2017 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-@ParametersAreNonnullByDefault
-package org.sonar.server.license.ws;
-
-import javax.annotation.ParametersAreNonnullByDefault;
import org.sonar.server.issue.notification.NewIssuesNotificationFactory;
import org.sonar.server.issue.ws.IssueWsModule;
import org.sonar.server.language.ws.LanguageWs;
-import org.sonar.server.license.ws.LicensesWsModule;
import org.sonar.server.measure.custom.ws.CustomMeasuresWsModule;
import org.sonar.server.measure.index.ProjectsEsModule;
import org.sonar.server.measure.ws.MeasuresWsModule;
import org.sonar.server.rule.ws.RuleWsSupport;
import org.sonar.server.rule.ws.RulesWs;
import org.sonar.server.rule.ws.TagsAction;
-import org.sonar.server.serverid.ws.ServerIdWsModule;
import org.sonar.server.setting.ws.SettingsWsModule;
import org.sonar.server.source.HtmlSourceDecorator;
import org.sonar.server.source.SourceService;
org.sonar.server.property.ws.IndexAction.class,
SettingsWsModule.class,
- // Licences
- LicensesWsModule.class,
-
TypeValidationModule.class,
// Project Links
HealthActionModule.class,
SystemWs.class,
- // Server id
- ServerIdWsModule.class,
-
// Plugins WS
PluginWSCommons.class,
PluginUpdateAggregator.class,
+++ /dev/null
-/*
- * SonarQube
- * Copyright (C) 2009-2017 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.sonar.server.serverid.ws;
-
-import org.sonar.api.server.ws.Request;
-import org.sonar.api.server.ws.Response;
-import org.sonar.api.server.ws.WebService;
-import org.sonar.api.utils.log.Logger;
-import org.sonar.api.utils.log.Loggers;
-import org.sonar.db.DbClient;
-import org.sonar.db.DbSession;
-import org.sonar.db.property.PropertyDto;
-import org.sonar.server.platform.ServerIdGenerator;
-import org.sonar.server.user.UserSession;
-import org.sonarqube.ws.ServerId.GenerateWsResponse;
-import org.sonarqube.ws.client.serverid.GenerateRequest;
-
-import static org.sonar.api.CoreProperties.ORGANISATION;
-import static org.sonar.api.CoreProperties.PERMANENT_SERVER_ID;
-import static org.sonar.api.CoreProperties.SERVER_ID_IP_ADDRESS;
-import static org.sonar.server.ws.WsUtils.writeProtobuf;
-
-public class GenerateAction implements ServerIdWsAction {
- public static final String PARAM_ORGANIZATION = "organization";
- public static final String PARAM_IP = "ip";
-
- private static final Logger LOG = Loggers.get(GenerateAction.class);
-
- private final UserSession userSession;
- private final ServerIdGenerator generator;
- private final DbClient dbClient;
-
- public GenerateAction(UserSession userSession, ServerIdGenerator generator, DbClient dbClient) {
- this.userSession = userSession;
- this.generator = generator;
- this.dbClient = dbClient;
- }
-
- @Override
- public void define(WebService.NewController controller) {
- WebService.NewAction action = controller.createAction("generate")
- .setDescription("Generate a server id.<br/>" +
- "Requires 'System Administer' permissions")
- .setSince("6.1")
- .setInternal(true)
- .setPost(true)
- .setResponseExample(getClass().getResource("generate-example.json"))
- .setHandler(this);
-
- action.createParam(PARAM_ORGANIZATION)
- .setDescription("Organization name")
- .setExampleValue("SonarSource")
- .setRequired(true);
-
- action.createParam(PARAM_IP)
- .setDescription("IP address")
- .setExampleValue("10.142.20.56")
- .setRequired(true);
- }
-
- @Override
- public void handle(Request request, Response response) throws Exception {
- userSession.checkIsSystemAdministrator();
-
- try (DbSession dbSession = dbClient.openSession(true)) {
- writeProtobuf(doHandle(dbSession, toGenerateRequest(request)), request, response);
- }
- }
-
- private GenerateWsResponse doHandle(DbSession dbSession, GenerateRequest request) {
- String serverId = generator.generate(request.getOrganization(), request.getIp());
- dbClient.propertiesDao().saveProperty(dbSession, new PropertyDto().setKey(PERMANENT_SERVER_ID).setValue(serverId));
- dbClient.propertiesDao().saveProperty(dbSession, new PropertyDto().setKey(ORGANISATION).setValue(request.getOrganization()));
- dbClient.propertiesDao().saveProperty(dbSession, new PropertyDto().setKey(SERVER_ID_IP_ADDRESS).setValue(request.getIp()));
- dbSession.commit();
- LOG.info("Generated new server ID={}", serverId);
-
- return GenerateWsResponse.newBuilder().setServerId(serverId).build();
- }
-
- private static GenerateRequest toGenerateRequest(Request request) {
- return GenerateRequest.builder()
- .setOrganization(request.mandatoryParam(PARAM_ORGANIZATION))
- .setIp(request.mandatoryParam(PARAM_IP))
- .build();
- }
-
-}
+++ /dev/null
-/*
- * SonarQube
- * Copyright (C) 2009-2017 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.sonar.server.serverid.ws;
-
-import org.sonar.api.server.ws.WebService;
-
-public class ServerIdWs implements WebService {
-
- private final ServerIdWsAction[] actions;
-
- public ServerIdWs(ServerIdWsAction... actions) {
- this.actions = actions;
- }
-
- @Override
- public void define(Context context) {
- NewController controller = context.createController("api/server_id")
- .setDescription("Get server id information and generate server id.")
- .setSince("6.1");
- for (ServerIdWsAction action : actions) {
- action.define(controller);
- }
- controller.done();
- }
-
-}
+++ /dev/null
-/*
- * SonarQube
- * Copyright (C) 2009-2017 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.sonar.server.serverid.ws;
-
-import org.sonar.server.ws.WsAction;
-
-public interface ServerIdWsAction extends WsAction {
- // Marker interface
-}
+++ /dev/null
-/*
- * SonarQube
- * Copyright (C) 2009-2017 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.sonar.server.serverid.ws;
-
-import org.sonar.core.platform.Module;
-
-public class ServerIdWsModule extends Module {
- @Override
- protected void configureModule() {
- add(
- ServerIdWs.class,
- ShowAction.class,
- GenerateAction.class);
- }
-}
+++ /dev/null
-/*
- * SonarQube
- * Copyright (C) 2009-2017 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.sonar.server.serverid.ws;
-
-import com.google.common.collect.ImmutableSet;
-import java.net.InetAddress;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.Set;
-import java.util.function.Function;
-import javax.annotation.Nullable;
-import org.sonar.api.server.ws.Request;
-import org.sonar.api.server.ws.Response;
-import org.sonar.api.server.ws.WebService;
-import org.sonar.core.util.stream.MoreCollectors;
-import org.sonar.db.DbClient;
-import org.sonar.db.DbSession;
-import org.sonar.db.property.PropertyDto;
-import org.sonar.server.platform.ServerIdGenerator;
-import org.sonar.server.user.UserSession;
-
-import static java.util.stream.Collectors.toList;
-import static org.sonar.api.CoreProperties.ORGANISATION;
-import static org.sonar.api.CoreProperties.PERMANENT_SERVER_ID;
-import static org.sonar.api.CoreProperties.SERVER_ID_IP_ADDRESS;
-import static org.sonar.server.ws.WsUtils.writeProtobuf;
-import static org.sonarqube.ws.ServerId.ShowWsResponse;
-
-public class ShowAction implements ServerIdWsAction {
-
- private static final Set<String> SETTINGS_KEYS = ImmutableSet.of(PERMANENT_SERVER_ID, ORGANISATION, SERVER_ID_IP_ADDRESS);
-
- private final UserSession userSession;
- private final ServerIdGenerator serverIdGenerator;
- private final DbClient dbClient;
-
- public ShowAction(UserSession userSession, ServerIdGenerator serverIdGenerator, DbClient dbClient) {
- this.userSession = userSession;
- this.serverIdGenerator = serverIdGenerator;
- this.dbClient = dbClient;
- }
-
- @Override
- public void define(WebService.NewController controller) {
- controller.createAction("show")
- .setDescription("Get server id configuration.<br/>" +
- "Requires 'System Administer' permissions")
- .setSince("6.1")
- .setInternal(true)
- .setResponseExample(getClass().getResource("show-example.json"))
- .setHandler(this);
- }
-
- @Override
- public void handle(Request request, Response response) throws Exception {
- userSession.checkIsSystemAdministrator();
- try (DbSession dbSession = dbClient.openSession(true)) {
- Map<String, PropertyDto> properties = dbClient.propertiesDao().selectGlobalPropertiesByKeys(dbSession, SETTINGS_KEYS).stream()
- .collect(MoreCollectors.uniqueIndex(PropertyDto::getKey, Function.identity()));
- writeProtobuf(doHandle(properties), request, response);
- }
- }
-
- private ShowWsResponse doHandle(Map<String, PropertyDto> properties) {
- ShowWsResponse.Builder responseBuilder = ShowWsResponse.newBuilder();
- List<String> validIpAddresses = serverIdGenerator.getAvailableAddresses().stream().map(InetAddress::getHostAddress).collect(toList());
- if (!validIpAddresses.isEmpty()) {
- responseBuilder.addAllValidIpAddresses(validIpAddresses);
- }
-
- Optional<String> serverId = getSettingValue(properties.get(PERMANENT_SERVER_ID));
- if (serverId.isPresent()) {
- responseBuilder.setServerId(serverId.get());
- Optional<String> organization = getSettingValue(properties.get(ORGANISATION));
- organization.ifPresent(responseBuilder::setOrganization);
- Optional<String> ip = getSettingValue(properties.get(SERVER_ID_IP_ADDRESS));
- ip.ifPresent(responseBuilder::setIp);
- boolean isValidServId = isValidServerId(serverId.get(), organization, ip);
- if (!isValidServId) {
- responseBuilder.setInvalidServerId(true);
- }
- }
- return responseBuilder.build();
- }
-
- private static Optional<String> getSettingValue(@Nullable PropertyDto propertyDto) {
- return propertyDto != null ? Optional.of(propertyDto.getValue()) : Optional.empty();
- }
-
- private boolean isValidServerId(String serverId, Optional<String> organization, Optional<String> ip) {
- return organization.isPresent()
- && ip.isPresent()
- && serverIdGenerator.validate(organization.get(), ip.get(), serverId);
- }
-}
+++ /dev/null
-/*
- * SonarQube
- * Copyright (C) 2009-2017 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-@ParametersAreNonnullByDefault
-package org.sonar.server.serverid.ws;
-
-import javax.annotation.ParametersAreNonnullByDefault;
+++ /dev/null
-/*
- * SonarQube
- * Copyright (C) 2009-2017 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.sonar.server.license.ws;
-
-import org.junit.Test;
-import org.sonar.core.platform.ComponentContainer;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-public class LicensesWsModuleTest {
- @Test
- public void verify_count_of_added_components() {
- ComponentContainer container = new ComponentContainer();
- new LicensesWsModule().configure(container);
- assertThat(container.size()).isEqualTo(2 + 2);
- }
-}
+++ /dev/null
-/*
- * SonarQube
- * Copyright (C) 2009-2017 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.sonar.server.license.ws;
-
-import com.google.common.collect.ImmutableMap;
-import java.nio.charset.StandardCharsets;
-import java.util.Collections;
-import java.util.Map;
-import javax.annotation.Nullable;
-import org.apache.commons.codec.binary.Base64;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.sonar.api.config.PropertyDefinition;
-import org.sonar.api.config.PropertyDefinitions;
-import org.sonar.api.server.ws.WebService;
-import org.sonar.api.utils.System2;
-import org.sonar.db.DbClient;
-import org.sonar.db.DbTester;
-import org.sonar.db.property.PropertyDbTester;
-import org.sonar.server.exceptions.ForbiddenException;
-import org.sonar.server.setting.ws.SettingsFinder;
-import org.sonar.server.tester.UserSessionRule;
-import org.sonar.server.ws.WsActionTester;
-import org.sonarqube.ws.Licenses;
-import org.sonarqube.ws.Licenses.ListWsResponse;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.entry;
-import static org.sonar.api.CoreProperties.PERMANENT_SERVER_ID;
-import static org.sonar.api.PropertyType.LICENSE;
-import static org.sonar.db.property.PropertyTesting.newGlobalPropertyDto;
-
-public class ListActionTest {
-
- private static final String LICENSE_KEY_SAMPLE = "sonar.governance.license.secured";
- private static final String LICENSE_NAME_SAMPLE = "Governance";
- private static final String ORGANIZATION_SAMPLE = "SonarSource";
- private static final String SERVER_ID_SAMPLE = "12345";
- private static final String PRODUCT_SAMPLE = "governance";
- private static final String TYPE_SAMPLE = "PRODUCTION";
- private static final String EXPIRATION_SAMPLE = "2099-01-01";
- @Rule
- public ExpectedException expectedException = ExpectedException.none();
-
- @Rule
- public UserSessionRule userSession = UserSessionRule.standalone();
-
- @Rule
- public DbTester db = DbTester.create(System2.INSTANCE);
-
- private DbClient dbClient = db.getDbClient();
- private PropertyDbTester propertyDb = new PropertyDbTester(db);
- private PropertyDefinitions definitions = new PropertyDefinitions();
- private SettingsFinder settingsFinder = new SettingsFinder(dbClient, definitions);
-
- private WsActionTester ws = new WsActionTester(new ListAction(userSession, definitions, dbClient, settingsFinder));
-
- @Test
- public void return_licenses() throws Exception {
- logInAsSystemAdministrator();
- addServerIdSettings("12345");
- String data = createBase64License("SonarSource", "governance", "12345", "2099-01-01", "PRODUCTION", ImmutableMap.of("other", "value"));
- addLicenseSetting("sonar.governance.license.secured", "Governance", data);
-
- ListWsResponse result = executeRequest();
-
- assertThat(result.getLicensesList()).hasSize(1);
- Licenses.License license = result.getLicenses(0);
- assertThat(license.getKey()).isEqualTo("sonar.governance.license.secured");
- assertThat(license.getName()).isEqualTo("Governance");
- assertThat(license.getValue()).isEqualTo(data);
- assertThat(license.getProduct()).isEqualTo("governance");
- assertThat(license.getOrganization()).isEqualTo("SonarSource");
- assertThat(license.getExpiration()).isEqualTo("2099-01-01");
- assertThat(license.getType()).isEqualTo("PRODUCTION");
- assertThat(license.getServerId()).isEqualTo("12345");
- assertThat(license.getAdditionalProperties().getAdditionalProperties()).containsOnly(entry("other", "value"));
-
- assertThat(license.hasInvalidProduct()).isFalse();
- assertThat(license.hasInvalidExpiration()).isFalse();
- assertThat(license.hasInvalidServerId()).isFalse();
- }
-
- @Test
- public void return_licenses_even_if_no_value_set_in_database() throws Exception {
- logInAsSystemAdministrator();
- addServerIdSettings("12345");
- definitions.addComponent(PropertyDefinition.builder("sonar.governance.license.secured").type(LICENSE).build());
-
- ListWsResponse result = executeRequest();
-
- assertThat(result.getLicensesList()).hasSize(1);
- Licenses.License license = result.getLicenses(0);
- assertThat(license.getKey()).isEqualTo("sonar.governance.license.secured");
- assertThat(license.hasValue()).isFalse();
- assertThat(license.hasProduct()).isFalse();
- assertThat(license.hasOrganization()).isFalse();
- assertThat(license.hasExpiration()).isFalse();
- assertThat(license.hasType()).isFalse();
- assertThat(license.hasServerId()).isFalse();
- assertThat(license.hasAdditionalProperties()).isFalse();
-
- assertThat(license.hasInvalidProduct()).isFalse();
- assertThat(license.hasInvalidExpiration()).isFalse();
- assertThat(license.hasInvalidServerId()).isFalse();
- }
-
- @Test
- public void return_information_when_no_licence_set() throws Exception {
- logInAsSystemAdministrator();
- addServerIdSettings(SERVER_ID_SAMPLE);
- addLicenseSetting(LICENSE_KEY_SAMPLE, null, toBase64(""));
-
- ListWsResponse result = executeRequest();
-
- assertThat(result.getLicensesList()).hasSize(1);
- Licenses.License license = result.getLicenses(0);
- assertThat(license.getKey()).isEqualTo(LICENSE_KEY_SAMPLE);
- assertThat(license.hasName()).isFalse();
- assertThat(license.getValue()).isEmpty();
- assertThat(license.hasProduct()).isFalse();
- assertThat(license.hasOrganization()).isFalse();
- assertThat(license.hasExpiration()).isFalse();
- assertThat(license.hasType()).isFalse();
- assertThat(license.hasServerId()).isFalse();
- assertThat(license.hasAdditionalProperties()).isFalse();
-
- assertThat(license.hasInvalidProduct()).isTrue();
- assertThat(license.hasInvalidExpiration()).isFalse();
- assertThat(license.hasInvalidServerId()).isTrue();
- }
-
- @Test
- public void return_license_with_bad_product() throws Exception {
- logInAsSystemAdministrator();
- addServerIdSettings(SERVER_ID_SAMPLE);
- addLicenseSetting(LICENSE_KEY_SAMPLE, LICENSE_NAME_SAMPLE,
- createBase64License(ORGANIZATION_SAMPLE, "Other", SERVER_ID_SAMPLE, EXPIRATION_SAMPLE, TYPE_SAMPLE, Collections.emptyMap()));
-
- ListWsResponse result = executeRequest();
-
- assertThat(result.getLicensesList()).hasSize(1);
- Licenses.License license = result.getLicenses(0);
- assertThat(license.getProduct()).isEqualTo("Other");
- assertThat(license.getInvalidProduct()).isTrue();
- assertThat(license.hasInvalidExpiration()).isFalse();
- assertThat(license.hasInvalidServerId()).isFalse();
- }
-
- @Test
- public void return_license_with_bad_server_id() throws Exception {
- logInAsSystemAdministrator();
- addServerIdSettings(SERVER_ID_SAMPLE);
- addLicenseSetting(LICENSE_KEY_SAMPLE, LICENSE_NAME_SAMPLE,
- createBase64License(ORGANIZATION_SAMPLE, PRODUCT_SAMPLE, "Other", EXPIRATION_SAMPLE, TYPE_SAMPLE, Collections.emptyMap()));
-
- ListWsResponse result = executeRequest();
-
- assertThat(result.getLicensesList()).hasSize(1);
- Licenses.License license = result.getLicenses(0);
- assertThat(license.getServerId()).isEqualTo("Other");
- assertThat(license.getInvalidServerId()).isTrue();
- assertThat(license.hasInvalidProduct()).isFalse();
- assertThat(license.hasInvalidExpiration()).isFalse();
- }
-
- @Test
- public void return_bad_server_id_when_server_has_no_server_id() throws Exception {
- logInAsSystemAdministrator();
- addLicenseSetting(LICENSE_KEY_SAMPLE, LICENSE_NAME_SAMPLE,
- createBase64License(ORGANIZATION_SAMPLE, PRODUCT_SAMPLE, SERVER_ID_SAMPLE, EXPIRATION_SAMPLE, TYPE_SAMPLE, Collections.emptyMap()));
-
- ListWsResponse result = executeRequest();
-
- assertThat(result.getLicensesList()).hasSize(1);
- Licenses.License license = result.getLicenses(0);
- assertThat(license.getInvalidServerId()).isTrue();
- }
-
- @Test
- public void does_not_return_invalid_server_id_when_all_servers_accepted_and_no_server_id_setting() throws Exception {
- logInAsSystemAdministrator();
- addLicenseSetting(LICENSE_KEY_SAMPLE, LICENSE_NAME_SAMPLE,
- createBase64License(ORGANIZATION_SAMPLE, PRODUCT_SAMPLE, "*", EXPIRATION_SAMPLE, TYPE_SAMPLE, Collections.emptyMap()));
-
- ListWsResponse result = executeRequest();
-
- assertThat(result.getLicensesList()).hasSize(1);
- Licenses.License license = result.getLicenses(0);
- assertThat(license.getServerId()).isEqualTo("*");
- assertThat(license.hasInvalidServerId()).isFalse();
- }
-
- @Test
- public void return_license_when_all_servers_are_accepted() throws Exception {
- logInAsSystemAdministrator();
- addServerIdSettings(SERVER_ID_SAMPLE);
- addLicenseSetting(LICENSE_KEY_SAMPLE, LICENSE_NAME_SAMPLE,
- createBase64License(ORGANIZATION_SAMPLE, PRODUCT_SAMPLE, "*", EXPIRATION_SAMPLE, TYPE_SAMPLE, Collections.emptyMap()));
-
- ListWsResponse result = executeRequest();
-
- assertThat(result.getLicensesList()).hasSize(1);
- Licenses.License license = result.getLicenses(0);
- assertThat(license.getServerId()).isEqualTo("*");
- assertThat(license.hasInvalidServerId()).isFalse();
- }
-
- @Test
- public void return_license_when_expired() throws Exception {
- logInAsSystemAdministrator();
- addServerIdSettings(SERVER_ID_SAMPLE);
- addLicenseSetting(LICENSE_KEY_SAMPLE, LICENSE_NAME_SAMPLE,
- createBase64License(ORGANIZATION_SAMPLE, PRODUCT_SAMPLE, SERVER_ID_SAMPLE, "2010-01-01", TYPE_SAMPLE, Collections.emptyMap()));
-
- ListWsResponse result = executeRequest();
-
- assertThat(result.getLicensesList()).hasSize(1);
- Licenses.License license = result.getLicenses(0);
- assertThat(license.getExpiration()).isEqualTo("2010-01-01");
- assertThat(license.getInvalidExpiration()).isTrue();
- assertThat(license.hasInvalidProduct()).isFalse();
- assertThat(license.hasInvalidServerId()).isFalse();
- }
-
- @Test
- public void none_license_type_settings_are_not_returned() throws Exception {
- logInAsSystemAdministrator();
- definitions.addComponent(PropertyDefinition.builder("foo").build());
- propertyDb.insertProperties(newGlobalPropertyDto().setKey("foo").setValue("value"));
-
- ListWsResponse result = executeRequest();
-
- assertThat(result.getLicensesList()).isEmpty();
- }
-
- @Test
- public void throw_ForbiddenException_if_not_system_administrator() throws Exception {
- userSession.logIn().setNonSystemAdministrator();
-
- expectedException.expect(ForbiddenException.class);
-
- executeRequest();
- }
-
- @Test
- public void test_ws_definition() {
- WebService.Action action = ws.getDef();
- assertThat(action).isNotNull();
- assertThat(action.isInternal()).isTrue();
- assertThat(action.isPost()).isFalse();
- assertThat(action.responseExampleAsString()).isNotEmpty();
- assertThat(action.params()).isEmpty();
- }
-
- private ListWsResponse executeRequest() {
- return ws.newRequest().executeProtobuf(ListWsResponse.class);
- }
-
- private void logInAsSystemAdministrator() {
- userSession.logIn().setSystemAdministrator();
- }
-
- private void addLicenseSetting(String key, @Nullable String name, String value) {
- definitions.addComponent(PropertyDefinition.builder(key).name(name).type(LICENSE).build());
- propertyDb.insertProperties(newGlobalPropertyDto().setKey(key).setValue(value));
- }
-
- private void addServerIdSettings(String serverId) {
- propertyDb.insertProperties(newGlobalPropertyDto().setKey(PERMANENT_SERVER_ID).setValue(serverId));
- }
-
- private static String toBase64(String data) {
- return Base64.encodeBase64String((data.getBytes(StandardCharsets.UTF_8)));
- }
-
- private static String createBase64License(@Nullable String organization, @Nullable String product, @Nullable String serverId, @Nullable String expirationDate,
- @Nullable String type, Map<String, String> additionalProperties) {
- StringBuilder data = new StringBuilder();
- data.append("Organisation: ").append(organization).append(" \n");
- data.append("Server: ").append(serverId).append(" \n");
- data.append("Product: ").append(product).append(" \n");
- data.append("Expiration: ").append(expirationDate).append(" \n");
- data.append("Type: ").append(type).append(" \n");
- for (Map.Entry<String, String> entry : additionalProperties.entrySet()) {
- data.append(entry.getKey()).append(": ").append(entry.getValue()).append(" \n");
- }
- return toBase64(data.toString());
- }
-
-}
+++ /dev/null
-/*
- * SonarQube
- * Copyright (C) 2009-2017 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.sonar.server.serverid.ws;
-
-import javax.annotation.Nullable;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.sonar.api.server.ws.WebService;
-import org.sonar.api.utils.System2;
-import org.sonar.api.utils.log.LogTester;
-import org.sonar.api.utils.log.LoggerLevel;
-import org.sonar.db.DbClient;
-import org.sonar.db.DbTester;
-import org.sonar.db.property.PropertyDto;
-import org.sonar.server.exceptions.ForbiddenException;
-import org.sonar.server.platform.ServerIdGenerator;
-import org.sonar.server.tester.UserSessionRule;
-import org.sonar.server.ws.TestRequest;
-import org.sonar.server.ws.WsActionTester;
-import org.sonarqube.ws.ServerId.GenerateWsResponse;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-import static org.sonar.api.CoreProperties.ORGANISATION;
-import static org.sonar.api.CoreProperties.PERMANENT_SERVER_ID;
-import static org.sonar.api.CoreProperties.SERVER_ID_IP_ADDRESS;
-import static org.sonar.server.serverid.ws.GenerateAction.PARAM_IP;
-import static org.sonar.server.serverid.ws.GenerateAction.PARAM_ORGANIZATION;
-import static org.sonar.test.JsonAssert.assertJson;
-
-public class GenerateActionTest {
-
- @Rule
- public ExpectedException expectedException = ExpectedException.none();
- @Rule
- public UserSessionRule userSession = UserSessionRule.standalone();
- @Rule
- public LogTester log = new LogTester();
- @Rule
- public DbTester db = DbTester.create(System2.INSTANCE);
-
- private DbClient dbClient = db.getDbClient();
- private ServerIdGenerator generator = mock(ServerIdGenerator.class);
- private GenerateAction underTest = new GenerateAction(userSession, generator, dbClient);
- private WsActionTester ws = new WsActionTester(underTest);
-
- @Test
- public void persist_settings() {
- logInAsSystemAdministrator();
-
- when(generator.generate("SonarSource", "10.51.42.255")).thenReturn("server_id");
-
- GenerateWsResponse result = call("SonarSource", "10.51.42.255");
-
- assertThat(result.getServerId()).isEqualTo("server_id");
- assertGlobalSetting(ORGANISATION, "SonarSource");
- assertGlobalSetting(SERVER_ID_IP_ADDRESS, "10.51.42.255");
- assertGlobalSetting(PERMANENT_SERVER_ID, "server_id");
- }
-
- @Test
- public void json_example() {
- logInAsSystemAdministrator();
-
- when(generator.generate("SonarSource", "127.0.0.1")).thenReturn("1818a1eefb26f9g");
-
- String result = ws.newRequest()
- .setParam(PARAM_ORGANIZATION, "SonarSource")
- .setParam(PARAM_IP, "127.0.0.1")
- .execute().getInput();
-
- assertJson(result).isSimilarTo(ws.getDef().responseExampleAsString());
- }
-
- @Test
- public void log_message_when_id_generated() {
- logInAsSystemAdministrator();
- when(generator.generate("SonarSource", "127.0.0.1")).thenReturn("server_id");
-
- call("SonarSource", "127.0.0.1");
-
- assertThat(log.logs(LoggerLevel.INFO)).contains("Generated new server ID=" + "server_id");
- }
-
- @Test
- public void definition() {
- WebService.Action definition = ws.getDef();
-
- assertThat(definition.key()).isEqualTo("generate");
- assertThat(definition.since()).isEqualTo("6.1");
- assertThat(definition.isInternal()).isTrue();
- assertThat(definition.isPost()).isTrue();
- assertThat(definition.responseExampleAsString()).isNotEmpty();
- assertThat(definition.params()).hasSize(2);
- }
-
- @Test
- public void throw_ForbiddenException_if_not_system_administrator() {
- userSession.logIn().setNonSystemAdministrator();
-
- expectedException.expect(ForbiddenException.class);
-
- call("SonarSource", "127.0.0.1");
- }
-
- @Test
- public void fail_if_no_organization() {
- logInAsSystemAdministrator();
-
- expectedException.expect(IllegalArgumentException.class);
-
- call(null, "127.0.0.1");
- }
-
- @Test
- public void fail_if_empty_organization() {
- logInAsSystemAdministrator();
-
- expectedException.expect(IllegalArgumentException.class);
-
- call("", "127.0.0.1");
- }
-
- @Test
- public void fail_if_no_ip() {
- logInAsSystemAdministrator();
-
- expectedException.expect(IllegalArgumentException.class);
-
- call("SonarSource", null);
- }
-
- @Test
- public void fail_if_empty_ip() {
- logInAsSystemAdministrator();
-
- expectedException.expect(IllegalArgumentException.class);
-
- call("SonarSource", "");
- }
-
- private void assertGlobalSetting(String key, String value) {
- PropertyDto result = dbClient.propertiesDao().selectGlobalProperty(key);
-
- assertThat(result)
- .extracting(PropertyDto::getKey, PropertyDto::getValue, PropertyDto::getResourceId)
- .containsExactly(key, value, null);
- }
-
- private GenerateWsResponse call(@Nullable String organization, @Nullable String ip) {
- TestRequest request = ws.newRequest()
- .setMethod("POST");
-
- if (organization != null) {
- request.setParam(PARAM_ORGANIZATION, organization);
- }
-
- if (ip != null) {
- request.setParam(PARAM_IP, ip);
- }
-
- return request.executeProtobuf(GenerateWsResponse.class);
- }
-
- private void logInAsSystemAdministrator() {
- userSession.logIn().setSystemAdministrator();
- }
-}
+++ /dev/null
-/*
- * SonarQube
- * Copyright (C) 2009-2017 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.sonar.server.serverid.ws;
-
-import org.junit.Test;
-import org.sonar.core.platform.ComponentContainer;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-public class ServerIdWsModuleTest {
- @Test
- public void verify_count_of_added_components() {
- ComponentContainer container = new ComponentContainer();
- new ServerIdWsModule().configure(container);
- assertThat(container.size()).isEqualTo(3 + 2);
- }
-}
+++ /dev/null
-/*
- * SonarQube
- * Copyright (C) 2009-2017 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.sonar.server.serverid.ws;
-
-import org.junit.Test;
-import org.sonar.api.server.ws.WebService;
-import org.sonar.db.DbClient;
-import org.sonar.server.platform.ServerIdGenerator;
-import org.sonar.server.user.UserSession;
-import org.sonar.server.ws.WsTester;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Mockito.mock;
-
-public class ServerIdWsTest {
-
- WsTester ws = new WsTester(new ServerIdWs(new ShowAction(mock(UserSession.class), mock(ServerIdGenerator.class), mock(DbClient.class))));
- WebService.Controller underTest = ws.controller("api/server_id");
-
- @Test
- public void definition() {
- assertThat(underTest.path()).isEqualTo("api/server_id");
- assertThat(underTest.since()).isEqualTo("6.1");
- assertThat(underTest.description()).isNotEmpty();
- }
-}
+++ /dev/null
-/*
- * SonarQube
- * Copyright (C) 2009-2017 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.sonar.server.serverid.ws;
-
-import java.net.InetAddress;
-import java.util.ArrayList;
-import java.util.List;
-import javax.annotation.Nullable;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.sonar.api.server.ws.WebService;
-import org.sonar.api.utils.System2;
-import org.sonar.db.DbClient;
-import org.sonar.db.DbTester;
-import org.sonar.db.property.PropertyDbTester;
-import org.sonar.server.exceptions.ForbiddenException;
-import org.sonar.server.platform.ServerIdGenerator;
-import org.sonar.server.tester.UserSessionRule;
-import org.sonar.server.ws.WsActionTester;
-import org.sonar.test.JsonAssert;
-import org.sonarqube.ws.ServerId.ShowWsResponse;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-import static org.sonar.db.property.PropertyTesting.newGlobalPropertyDto;
-import static org.sonarqube.ws.MediaTypes.JSON;
-
-public class ShowActionTest {
-
- @Rule
- public ExpectedException expectedException = ExpectedException.none();
-
- @Rule
- public UserSessionRule userSession = UserSessionRule.standalone();
-
- @Rule
- public DbTester db = DbTester.create(System2.INSTANCE);
-
- private DbClient dbClient = db.getDbClient();
- private PropertyDbTester propertyDb = new PropertyDbTester(db);
- private ServerIdGenerator generator = mock(ServerIdGenerator.class);
- private WsActionTester ws = new WsActionTester(new ShowAction(userSession, generator, dbClient));
-
- @Test
- public void return_server_id_info() throws Exception {
- logInAsSystemAdministrator();
-
- when(generator.validate("home", "127.0.0.1", "1818a1eefb26f9g")).thenReturn(true);
- setAvailableIpAdresses("192.168.1.1", "127.0.0.1");
- insertConfiguration("1818a1eefb26f9g", "home", "127.0.0.1");
-
- ShowWsResponse response = executeRequest();
-
- assertThat(response.getServerId()).isEqualTo("1818a1eefb26f9g");
- assertThat(response.getOrganization()).isEqualTo("home");
- assertThat(response.getIp()).isEqualTo("127.0.0.1");
- assertThat(response.getValidIpAddressesList()).containsOnly("192.168.1.1", "127.0.0.1");
- assertThat(response.hasInvalidServerId()).isFalse();
- }
-
- @Test
- public void return_invalid_server_id() throws Exception {
- logInAsSystemAdministrator();
- when(generator.validate("home", "127.0.0.1", "1818a1eefb26f9g")).thenReturn(true);
- insertConfiguration("invalid", null, null);
-
- ShowWsResponse response = executeRequest();
-
- assertThat(response.hasInvalidServerId()).isTrue();
- assertThat(response.getServerId()).isEqualTo("invalid");
- assertThat(response.hasOrganization()).isFalse();
- assertThat(response.hasIp()).isFalse();
- assertThat(response.getValidIpAddressesList()).isEmpty();
- }
-
- @Test
- public void return_no_server_id_info_when_no_settings_and_no_available_ips() throws Exception {
- logInAsSystemAdministrator();
-
- ShowWsResponse response = executeRequest();
-
- assertThat(response.hasServerId()).isFalse();
- assertThat(response.hasOrganization()).isFalse();
- assertThat(response.hasIp()).isFalse();
- assertThat(response.getValidIpAddressesList()).isEmpty();
- assertThat(response.hasInvalidServerId()).isFalse();
- }
-
- @Test
- public void return_no_server_id_info_when_no_server_id_but_other_settings() throws Exception {
- logInAsSystemAdministrator();
- insertConfiguration(null, "home", "127.0.0.1");
-
- ShowWsResponse response = executeRequest();
-
- assertThat(response.hasServerId()).isFalse();
- assertThat(response.hasOrganization()).isFalse();
- assertThat(response.hasIp()).isFalse();
- assertThat(response.getValidIpAddressesList()).isEmpty();
- assertThat(response.hasInvalidServerId()).isFalse();
- }
-
- @Test
- public void return_available_ips_even_if_no_settings() throws Exception {
- logInAsSystemAdministrator();
- setAvailableIpAdresses("192.168.1.1", "127.0.0.1");
-
- ShowWsResponse response = executeRequest();
-
- assertThat(response.hasServerId()).isFalse();
- assertThat(response.hasOrganization()).isFalse();
- assertThat(response.hasIp()).isFalse();
- assertThat(response.getValidIpAddressesList()).containsOnly("192.168.1.1", "127.0.0.1");
- assertThat(response.hasInvalidServerId()).isFalse();
- }
-
- @Test
- public void throw_ForbiddenException_if_not_system_administrator() throws Exception {
- userSession.logIn().setNonSystemAdministrator();
-
- expectedException.expect(ForbiddenException.class);
- expectedException.expectMessage("Insufficient privileges");
-
- executeRequest();
- }
-
- @Test
- public void test_ws_definition() {
- WebService.Action action = ws.getDef();
- assertThat(action).isNotNull();
- assertThat(action.isInternal()).isTrue();
- assertThat(action.isPost()).isFalse();
- assertThat(action.responseExampleAsString()).isNotEmpty();
- assertThat(action.params()).isEmpty();
- }
-
- @Test
- public void test_example_json_response() {
- logInAsSystemAdministrator();
- when(generator.validate("home", "127.0.0.1", "1818a1eefb26f9g")).thenReturn(true);
- setAvailableIpAdresses("192.168.1.1", "127.0.0.1");
- insertConfiguration("1818a1eefb26f9g", "home", "127.0.0.1");
-
- String result = ws.newRequest()
- .setMediaType(JSON)
- .execute()
- .getInput();
-
- JsonAssert.assertJson(ws.getDef().responseExampleAsString()).isSimilarTo(result);
- }
-
- private void insertConfiguration(@Nullable String serverId, @Nullable String organisation, @Nullable String ip) {
- if (serverId != null) {
- propertyDb.insertProperties(newGlobalPropertyDto().setKey("sonar.server_id").setValue(serverId));
- }
- if (organisation != null) {
- propertyDb.insertProperties(newGlobalPropertyDto().setKey("sonar.organisation").setValue(organisation));
- }
- if (ip != null) {
- propertyDb.insertProperties(newGlobalPropertyDto().setKey("sonar.server_id.ip_address").setValue(ip));
- }
- }
-
- private void setAvailableIpAdresses(String... ips) {
- List<InetAddress> availableAddresses = new ArrayList<>();
- for (String ip : ips) {
- InetAddress inetAddress = mock(InetAddress.class);
- when(inetAddress.getHostAddress()).thenReturn(ip);
- availableAddresses.add(inetAddress);
- }
- when(generator.getAvailableAddresses()).thenReturn(availableAddresses);
- }
-
- private ShowWsResponse executeRequest() {
- return ws.newRequest()
- .executeProtobuf(ShowWsResponse.class);
- }
-
- private void logInAsSystemAdministrator() {
- userSession.logIn().setSystemAdministrator();
- }
-}
+++ /dev/null
-/*
- * SonarQube
- * Copyright (C) 2009-2017 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.sonarqube.ws.client.license;
-
-import org.sonarqube.ws.Licenses.ListWsResponse;
-import org.sonarqube.ws.client.BaseService;
-import org.sonarqube.ws.client.GetRequest;
-import org.sonarqube.ws.client.WsConnector;
-
-import static org.sonarqube.ws.client.license.LicensesWsParameters.ACTION_LIST;
-import static org.sonarqube.ws.client.license.LicensesWsParameters.CONTROLLER_SETTINGS;
-
-public class LicensesService extends BaseService {
-
- public LicensesService(WsConnector wsConnector) {
- super(wsConnector, CONTROLLER_SETTINGS);
- }
-
- public ListWsResponse list() {
- GetRequest getRequest = new GetRequest(path(ACTION_LIST));
- return call(getRequest, ListWsResponse.parser());
- }
-
-}
+++ /dev/null
-/*
- * SonarQube
- * Copyright (C) 2009-2017 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.sonarqube.ws.client.license;
-
-public class LicensesWsParameters {
- public static final String CONTROLLER_SETTINGS = "api/licenses";
-
- public static final String ACTION_LIST = "list";
-
- private LicensesWsParameters() {
- // Only static stuff
- }
-
-}
+++ /dev/null
-/*
- * SonarQube
- * Copyright (C) 2009-2017 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-@ParametersAreNonnullByDefault
-package org.sonarqube.ws.client.license;
-
-import javax.annotation.ParametersAreNonnullByDefault;
-
+++ /dev/null
-/*
- * SonarQube
- * Copyright (C) 2009-2017 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.sonarqube.ws.client.serverid;
-
-import javax.annotation.concurrent.Immutable;
-
-import static com.google.common.base.Preconditions.checkArgument;
-
-@Immutable
-public class GenerateRequest {
- private final String organization;
- private final String ip;
-
- private GenerateRequest(Builder builder) {
- this.organization = builder.organization;
- this.ip = builder.ip;
- }
-
- public String getOrganization() {
- return organization;
- }
-
- public String getIp() {
- return ip;
- }
-
- public static Builder builder() {
- return new Builder();
- }
-
- public static class Builder {
- private String organization;
- private String ip;
-
- private Builder() {
- // enforce static constructor
- }
-
- public Builder setOrganization(String organization) {
- this.organization = organization;
- return this;
- }
-
- public Builder setIp(String ip) {
- this.ip = ip;
- return this;
- }
-
- public GenerateRequest build() {
- checkArgument(organization != null && !organization.isEmpty(), "Organization must not be null or empty");
- checkArgument(ip != null && !ip.isEmpty(), "IP must not be null or empty");
- return new GenerateRequest(this);
- }
- }
-}
+++ /dev/null
-/*
- * SonarQube
- * Copyright (C) 2009-2017 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-
-@ParametersAreNonnullByDefault
-package org.sonarqube.ws.client.serverid;
-
-import javax.annotation.ParametersAreNonnullByDefault;
-
+++ /dev/null
-// SonarQube, open source software quality management tool.
-// Copyright (C) 2008-2016 SonarSource
-// mailto:contact AT sonarsource DOT com
-//
-// SonarQube is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 3 of the License, or (at your option) any later version.
-//
-// SonarQube is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-
-syntax = "proto2";
-
-package sonarqube.ws.licenses;
-
-option java_package = "org.sonarqube.ws";
-option java_outer_classname = "Licenses";
-option optimize_for = SPEED;
-
-// Response of GET api/licenses/list
-message ListWsResponse {
- repeated License licenses = 1;
-}
-
-message License {
- optional string key = 1;
- optional string name = 2;
- optional string value = 3;
- optional string product = 4;
- optional string organization = 5;
- optional string expiration = 6;
- optional string serverId = 7;
- optional string type = 8;
- optional AdditionalProperties additionalProperties = 9;
- optional bool invalidProduct = 10;
- optional bool invalidExpiration = 11;
- optional bool invalidServerId = 12;
-}
-
-message AdditionalProperties {
- map<string, string> additionalProperties = 1;
-}
-
-
-
+++ /dev/null
-// SonarQube, open source software quality management tool.
-// Copyright (C) 2008-2016 SonarSource
-// mailto:contact AT sonarsource DOT com
-//
-// SonarQube is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 3 of the License, or (at your option) any later version.
-//
-// SonarQube is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-
-syntax = "proto2";
-
-package sonarqube.ws.serverid;
-
-option java_package = "org.sonarqube.ws";
-option java_outer_classname = "ServerId";
-option optimize_for = SPEED;
-
-// Response of GET api/server_id/show
-message ShowWsResponse {
- optional string serverId = 1;
- optional string organization = 2;
- optional string ip = 3;
- repeated string validIpAddresses = 4;
- optional bool invalidServerId = 5;
-}
-
-// Response of POST api/server_id/generate
-message GenerateWsResponse {
- optional string serverId = 1;
-}
+++ /dev/null
-/*
- * SonarQube
- * Copyright (C) 2009-2017 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.sonarqube.ws.client.license;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.sonarqube.ws.Licenses.ListWsResponse;
-import org.sonarqube.ws.client.GetRequest;
-import org.sonarqube.ws.client.ServiceTester;
-import org.sonarqube.ws.client.WsConnector;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Mockito.mock;
-
-public class LicensesServiceTest {
-
- @Rule
- public ServiceTester<LicensesService> serviceTester = new ServiceTester<>(new LicensesService(mock(WsConnector.class)));
-
- private LicensesService underTest = serviceTester.getInstanceUnderTest();
-
- @Test
- public void list_definitions() {
- underTest.list();
- GetRequest getRequest = serviceTester.getGetRequest();
-
- assertThat(serviceTester.getGetParser()).isSameAs(ListWsResponse.parser());
- serviceTester.assertThat(getRequest).andNoOtherParam();
- }
-
-}
+++ /dev/null
-/*
- * SonarQube
- * Copyright (C) 2009-2017 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.sonarqube.ws.client.serverid;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-
-public class GenerateRequestTest {
-
- @Rule
- public ExpectedException expectedException = ExpectedException.none();
-
- GenerateRequest.Builder underTest = GenerateRequest.builder();
-
- @Test
- public void fail_if_null_organization() {
- expectedException.expect(IllegalArgumentException.class);
- expectedException.expectMessage("Organization must not be null or empty");
-
- underTest.setIp("127.0.0.1").setOrganization(null).build();
- }
-
- @Test
- public void fail_if_empty_organization() {
- expectedException.expect(IllegalArgumentException.class);
- expectedException.expectMessage("Organization must not be null or empty");
-
- underTest.setIp("127.0.0.1").setOrganization("").build();
- }
-
- @Test
- public void fail_if_null_ip() {
- expectedException.expect(IllegalArgumentException.class);
- expectedException.expectMessage("IP must not be null or empty");
-
- underTest.setOrganization("SonarSource").setIp(null).build();
- }
-
- @Test
- public void fail_if_empty_ip() {
- expectedException.expect(IllegalArgumentException.class);
- expectedException.expectMessage("IP must not be null or empty");
-
- underTest.setOrganization("SonarSource").setIp("").build();
- }
-}
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
-import org.sonarqube.pageobjects.Navigation;
-import org.sonarqube.pageobjects.ServerIdPage;
import org.sonarqube.tests.Category4Suite;
import org.sonarqube.tests.Tester;
-import org.sonarqube.ws.MediaTypes;
-import org.sonarqube.ws.ServerId.ShowWsResponse;
import org.sonarqube.ws.WsSystem;
-import org.sonarqube.ws.client.GetRequest;
import util.ItUtils;
import static org.apache.commons.lang.StringUtils.startsWithAny;
}
}
- @Test
- public void generate_server_id() throws IOException {
- Navigation nav = tester.openBrowser().openHome().logIn().submitCredentials(ADMIN_USER_LOGIN);
- String validIpAddress = getValidIpAddress();
-
- nav.openServerId()
- .setOrganization("Name with invalid chars like $")
- .setIpAddress(validIpAddress)
- .submitForm()
- .assertError();
-
- nav.openServerId()
- .setOrganization("DEMO")
- .setIpAddress("invalid_address")
- .submitForm()
- .assertError();
-
- ServerIdPage page = nav.openServerId()
- .setOrganization("DEMO")
- .setIpAddress(validIpAddress)
- .submitForm();
-
- String serverId = page.serverIdInput().val();
- assertThat(serverId).isNotEmpty();
- }
-
/**
* See http://jira.codehaus.org/browse/SONAR-2727
*/
assertThat(jsonAsMap.get("webServices")).isNotNull();
}
- private String getValidIpAddress() throws IOException {
- ShowWsResponse response = ShowWsResponse.parseFrom(tester.wsClient().wsConnector().call(
- new GetRequest("api/server_id/show").setMediaType(MediaTypes.PROTOBUF)).contentStream());
- assertThat(response.getValidIpAddressesCount()).isGreaterThan(0);
- return response.getValidIpAddresses(0);
- }
-
}