Added tests for OAuth2Service
This commit is contained in:
parent
328c827744
commit
a2bf3d687f
@ -371,6 +371,7 @@ public class OAuth2ServiceImpl implements OAuth2Service {
|
||||
}
|
||||
}
|
||||
|
||||
// TODO maybe it's better to load all tenants and get attribute for each one
|
||||
private ListenableFuture<Map<String, String>> getAllOAuth2ClientsParamsAttribute() {
|
||||
ListenableFuture<List<EntityAttributeKvEntry>> entityAttributeKvEntriesFuture;
|
||||
try {
|
||||
|
||||
@ -0,0 +1,415 @@
|
||||
/**
|
||||
* Copyright © 2016-2020 The Thingsboard Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.thingsboard.server.dao.service;
|
||||
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
import org.junit.After;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.thingsboard.server.common.data.DataConstants;
|
||||
import org.thingsboard.server.common.data.Tenant;
|
||||
import org.thingsboard.server.common.data.id.TenantId;
|
||||
import org.thingsboard.server.common.data.oauth2.*;
|
||||
import org.thingsboard.server.dao.attributes.AttributesService;
|
||||
import org.thingsboard.server.dao.exception.DataValidationException;
|
||||
import org.thingsboard.server.dao.oauth2.OAuth2Service;
|
||||
import org.thingsboard.server.dao.oauth2.OAuth2Utils;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import static org.thingsboard.server.dao.oauth2.OAuth2Utils.ALLOW_OAUTH2_CONFIGURATION;
|
||||
|
||||
public class BaseOAuth2ServiceTest extends AbstractServiceTest {
|
||||
|
||||
@Autowired
|
||||
protected OAuth2Service oAuth2Service;
|
||||
|
||||
@Autowired
|
||||
protected AttributesService attributesService;
|
||||
|
||||
private TenantId tenantId;
|
||||
|
||||
@Before
|
||||
public void beforeRun() throws Exception {
|
||||
Tenant tenant = new Tenant();
|
||||
tenant.setTitle("My tenant");
|
||||
Tenant savedTenant = tenantService.saveTenant(tenant);
|
||||
Assert.assertNotNull(savedTenant);
|
||||
tenantId = savedTenant.getId();
|
||||
|
||||
Assert.assertNull(oAuth2Service.getSystemOAuth2ClientsParams());
|
||||
Assert.assertNull(oAuth2Service.getTenantOAuth2ClientsParams(tenantId));
|
||||
|
||||
Assert.assertTrue(attributesService.findAll(tenantId, tenantId, DataConstants.SERVER_SCOPE).get().isEmpty());
|
||||
Assert.assertNull(adminSettingsService.findAdminSettingsByKey(TenantId.SYS_TENANT_ID, OAuth2Utils.OAUTH2_CLIENT_REGISTRATIONS_PARAMS));
|
||||
}
|
||||
|
||||
@After
|
||||
public void after() throws Exception {
|
||||
clearSysAdmin();
|
||||
|
||||
tenantService.deleteTenant(tenantId);
|
||||
|
||||
Assert.assertNull(oAuth2Service.getSystemOAuth2ClientsParams());
|
||||
Assert.assertNull(oAuth2Service.getTenantOAuth2ClientsParams(tenantId));
|
||||
|
||||
Assert.assertTrue(attributesService.findAll(tenantId, tenantId, DataConstants.SERVER_SCOPE).get().isEmpty());
|
||||
Assert.assertNull(adminSettingsService.findAdminSettingsByKey(TenantId.SYS_TENANT_ID, OAuth2Utils.OAUTH2_CLIENT_REGISTRATIONS_PARAMS));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIsOAuth2Allowed_null() throws IOException {
|
||||
updateTenantAllowOAuth2Setting(null);
|
||||
Assert.assertTrue(oAuth2Service.isOAuth2ClientRegistrationAllowed(tenantId));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIsOAuth2Allowed_false() throws IOException {
|
||||
updateTenantAllowOAuth2Setting(false);
|
||||
Assert.assertFalse(oAuth2Service.isOAuth2ClientRegistrationAllowed(tenantId));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIsOAuth2Allowed_true() throws IOException {
|
||||
updateTenantAllowOAuth2Setting(true);
|
||||
Assert.assertTrue(oAuth2Service.isOAuth2ClientRegistrationAllowed(tenantId));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSaveSystemOAuth2() throws IOException {
|
||||
updateTenantAllowOAuth2Setting(true);
|
||||
Assert.assertTrue(oAuth2Service.isOAuth2ClientRegistrationAllowed(tenantId));
|
||||
}
|
||||
|
||||
@Test(expected = DataValidationException.class)
|
||||
public void testSaveSystemParamsWithDuplicateDomains() {
|
||||
oAuth2Service.saveSystemOAuth2ClientsParams(clientsParamsWithDuplicateDomains());
|
||||
}
|
||||
|
||||
@Test(expected = DataValidationException.class)
|
||||
public void testSaveSystemParamsWithDuplicateRegistrationIds() {
|
||||
oAuth2Service.saveSystemOAuth2ClientsParams(clientsParamsWithDuplicateRegistrationIds());
|
||||
}
|
||||
|
||||
@Test(expected = DataValidationException.class)
|
||||
public void testSaveTenantParamsWithDuplicateRegistrationIds() {
|
||||
oAuth2Service.saveTenantOAuth2ClientsParams(tenantId, clientsParamsWithDuplicateRegistrationIds());
|
||||
}
|
||||
|
||||
@Test(expected = DataValidationException.class)
|
||||
public void testSaveTenantParamsWithMultipleDomains() {
|
||||
oAuth2Service.saveTenantOAuth2ClientsParams(tenantId, validClientsParamsWithMultipleDomains());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSaveSystemParams() {
|
||||
OAuth2ClientsParams clientsParams = validClientsParams();
|
||||
OAuth2ClientsParams savedClientParams = oAuth2Service.saveSystemOAuth2ClientsParams(clientsParams);
|
||||
|
||||
Assert.assertNotNull(adminSettingsService.findAdminSettingsByKey(TenantId.SYS_TENANT_ID, OAuth2Utils.OAUTH2_CLIENT_REGISTRATIONS_PARAMS));
|
||||
Assert.assertEquals(clientsParams, savedClientParams);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSaveSystemParamsWithMultipleDomains() {
|
||||
OAuth2ClientsParams clientsParams = validClientsParamsWithMultipleDomains();
|
||||
OAuth2ClientsParams savedClientParams = oAuth2Service.saveSystemOAuth2ClientsParams(clientsParams);
|
||||
|
||||
Assert.assertNotNull(adminSettingsService.findAdminSettingsByKey(TenantId.SYS_TENANT_ID, OAuth2Utils.OAUTH2_CLIENT_REGISTRATIONS_PARAMS));
|
||||
Assert.assertEquals(clientsParams, savedClientParams);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFindSystemParams() {
|
||||
OAuth2ClientsParams clientsParams = validClientsParams();
|
||||
oAuth2Service.saveSystemOAuth2ClientsParams(clientsParams);
|
||||
|
||||
Assert.assertNotNull(adminSettingsService.findAdminSettingsByKey(TenantId.SYS_TENANT_ID, OAuth2Utils.OAUTH2_CLIENT_REGISTRATIONS_PARAMS));
|
||||
|
||||
OAuth2ClientsParams foundClientParams = oAuth2Service.getSystemOAuth2ClientsParams();
|
||||
Assert.assertNotNull(foundClientParams);
|
||||
Assert.assertEquals(clientsParams, foundClientParams);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSaveTenantParams() {
|
||||
OAuth2ClientsParams clientsParams = validClientsParams();
|
||||
OAuth2ClientsDomainParams domainParams = clientsParams.getClientsDomainsParams().get(0);
|
||||
String domainKey = OAuth2Utils.constructAdminSettingsDomainKey(domainParams.getDomainName());
|
||||
|
||||
Assert.assertNull(adminSettingsService.findAdminSettingsByKey(tenantId, domainKey));
|
||||
|
||||
OAuth2ClientsParams savedClientParams = oAuth2Service.saveTenantOAuth2ClientsParams(tenantId, clientsParams);
|
||||
|
||||
Assert.assertNotNull(adminSettingsService.findAdminSettingsByKey(tenantId, domainKey));
|
||||
Assert.assertNotNull(savedClientParams);
|
||||
|
||||
OAuth2ClientsDomainParams savedDomainParams = savedClientParams.getClientsDomainsParams().get(0);
|
||||
Assert.assertNotNull(savedDomainParams.getAdminSettingsId());
|
||||
Assert.assertEquals(domainParams.getDomainName(), savedDomainParams.getDomainName());
|
||||
Assert.assertEquals(domainParams.getClientRegistrations(), savedDomainParams.getClientRegistrations());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFindTenantParams() {
|
||||
OAuth2ClientsParams clientsParams = validClientsParams();
|
||||
OAuth2ClientsDomainParams domainParams = clientsParams.getClientsDomainsParams().get(0);
|
||||
String domainKey = OAuth2Utils.constructAdminSettingsDomainKey(domainParams.getDomainName());
|
||||
|
||||
Assert.assertNull(adminSettingsService.findAdminSettingsByKey(tenantId, domainKey));
|
||||
|
||||
OAuth2ClientsParams savedClientsParams = oAuth2Service.saveTenantOAuth2ClientsParams(tenantId, clientsParams);
|
||||
|
||||
Assert.assertNotNull(adminSettingsService.findAdminSettingsByKey(tenantId, domainKey));
|
||||
|
||||
OAuth2ClientsParams foundClientsParams = oAuth2Service.getTenantOAuth2ClientsParams(tenantId);
|
||||
Assert.assertEquals(savedClientsParams, foundClientsParams);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetClientRegistrationWithTenant() {
|
||||
OAuth2ClientsParams tenantClientsParams = validClientsParams();
|
||||
OAuth2ClientsParams sysAdminClientsParams = validClientsParams();
|
||||
|
||||
oAuth2Service.saveTenantOAuth2ClientsParams(tenantId, tenantClientsParams);
|
||||
oAuth2Service.saveSystemOAuth2ClientsParams(sysAdminClientsParams);
|
||||
|
||||
OAuth2Utils.toClientRegistrationStream(tenantClientsParams)
|
||||
.forEach(clientRegistration -> {
|
||||
Pair<TenantId, OAuth2ClientRegistration> pair = oAuth2Service.getClientRegistrationWithTenant(clientRegistration.getRegistrationId());
|
||||
Assert.assertEquals(tenantId, pair.getKey());
|
||||
Assert.assertEquals(clientRegistration.getRegistrationId(), pair.getValue().getRegistrationId());
|
||||
});
|
||||
OAuth2Utils.toClientRegistrationStream(sysAdminClientsParams)
|
||||
.forEach(clientRegistration -> {
|
||||
Pair<TenantId, OAuth2ClientRegistration> pair = oAuth2Service.getClientRegistrationWithTenant(clientRegistration.getRegistrationId());
|
||||
Assert.assertNotNull(pair);
|
||||
Assert.assertEquals(TenantId.SYS_TENANT_ID, pair.getKey());
|
||||
Assert.assertEquals(clientRegistration.getRegistrationId(), pair.getValue().getRegistrationId());
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetClientRegistration() {
|
||||
OAuth2ClientsParams tenantClientsParams = validClientsParams();
|
||||
OAuth2ClientsParams sysAdminClientsParams = validClientsParams();
|
||||
|
||||
oAuth2Service.saveTenantOAuth2ClientsParams(tenantId, tenantClientsParams);
|
||||
oAuth2Service.saveSystemOAuth2ClientsParams(sysAdminClientsParams);
|
||||
|
||||
Stream.concat(
|
||||
OAuth2Utils.toClientRegistrationStream(tenantClientsParams),
|
||||
OAuth2Utils.toClientRegistrationStream(sysAdminClientsParams)
|
||||
)
|
||||
.forEach(clientRegistration -> {
|
||||
OAuth2ClientRegistration foundClientRegistration = oAuth2Service.getClientRegistration(clientRegistration.getRegistrationId());
|
||||
Assert.assertNotNull(foundClientRegistration);
|
||||
Assert.assertEquals(clientRegistration.getRegistrationId(), foundClientRegistration.getRegistrationId());
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetOAuth2Clients() {
|
||||
OAuth2ClientsParams tenantClientsParams = validClientsParams();
|
||||
OAuth2ClientsParams sysAdminClientsParams = validClientsParams();
|
||||
|
||||
OAuth2ClientsDomainParams tenantDomainParams = tenantClientsParams.getClientsDomainsParams().get(0);
|
||||
OAuth2ClientsDomainParams systemDomainParams = sysAdminClientsParams.getClientsDomainsParams().get(0);
|
||||
systemDomainParams.setDomainName(tenantDomainParams.getDomainName());
|
||||
|
||||
oAuth2Service.saveTenantOAuth2ClientsParams(tenantId, tenantClientsParams);
|
||||
oAuth2Service.saveSystemOAuth2ClientsParams(sysAdminClientsParams);
|
||||
|
||||
List<OAuth2ClientInfo> oAuth2Clients = oAuth2Service.getOAuth2Clients(tenantDomainParams.getDomainName());
|
||||
|
||||
Set<String> actualLabels = Stream.concat(
|
||||
tenantDomainParams.getClientRegistrations().stream()
|
||||
.map(OAuth2ClientRegistration::getLoginButtonLabel),
|
||||
systemDomainParams.getClientRegistrations().stream()
|
||||
.map(OAuth2ClientRegistration::getLoginButtonLabel)
|
||||
).collect(Collectors.toSet());
|
||||
|
||||
|
||||
Set<String> foundLabels = oAuth2Clients.stream().map(OAuth2ClientInfo::getName).collect(Collectors.toSet());
|
||||
Assert.assertEquals(actualLabels, foundLabels);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetAllOAuth2ClientsParams() {
|
||||
OAuth2ClientsParams tenantClientsParams = validClientsParams();
|
||||
OAuth2ClientsParams sysAdminClientsParams = validClientsParams();
|
||||
|
||||
Map<TenantId, OAuth2ClientsParams> emptyParams = oAuth2Service.getAllOAuth2ClientsParams();
|
||||
Assert.assertTrue(emptyParams.isEmpty());
|
||||
|
||||
OAuth2ClientsParams savedTenantParams = oAuth2Service.saveTenantOAuth2ClientsParams(tenantId, tenantClientsParams);
|
||||
OAuth2ClientsParams savedSystemParams = oAuth2Service.saveSystemOAuth2ClientsParams(sysAdminClientsParams);
|
||||
|
||||
Map<TenantId, OAuth2ClientsParams> clientsParams = oAuth2Service.getAllOAuth2ClientsParams();
|
||||
|
||||
OAuth2ClientsParams foundTenantParams = clientsParams.get(tenantId);
|
||||
Assert.assertEquals(savedTenantParams, foundTenantParams);
|
||||
|
||||
OAuth2ClientsParams foundSystemParams = clientsParams.get(TenantId.SYS_TENANT_ID);
|
||||
Assert.assertEquals(savedSystemParams, foundSystemParams);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDeleteSystemOAuth2ClientsParams() {
|
||||
OAuth2ClientsParams sysAdminClientsParams = validClientsParams();
|
||||
|
||||
Assert.assertNull(oAuth2Service.getSystemOAuth2ClientsParams());
|
||||
|
||||
oAuth2Service.saveSystemOAuth2ClientsParams(sysAdminClientsParams);
|
||||
|
||||
Assert.assertNotNull(oAuth2Service.getSystemOAuth2ClientsParams());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDeleteTenantOAuth2ClientsParams() {
|
||||
OAuth2ClientsParams tenantClientsParams = validClientsParams();
|
||||
|
||||
Assert.assertNull(oAuth2Service.getTenantOAuth2ClientsParams(tenantId));
|
||||
|
||||
oAuth2Service.saveTenantOAuth2ClientsParams(tenantId, tenantClientsParams);
|
||||
|
||||
Assert.assertNotNull(oAuth2Service.getTenantOAuth2ClientsParams(tenantId));
|
||||
}
|
||||
|
||||
|
||||
private void clearSysAdmin() {
|
||||
oAuth2Service.deleteSystemOAuth2ClientsParams();
|
||||
Assert.assertNull(adminSettingsService.findAdminSettingsByKey(TenantId.SYS_TENANT_ID, OAuth2Utils.OAUTH2_CLIENT_REGISTRATIONS_PARAMS));
|
||||
}
|
||||
|
||||
private void updateTenantAllowOAuth2Setting(Boolean allowOAuth2) throws IOException {
|
||||
Tenant tenant = tenantService.findTenantById(tenantId);
|
||||
if (allowOAuth2 == null) {
|
||||
tenant.setAdditionalInfo(mapper.readTree("{}"));
|
||||
} else {
|
||||
String additionalInfo = "{\"" + ALLOW_OAUTH2_CONFIGURATION + "\":" + allowOAuth2 + "}";
|
||||
tenant.setAdditionalInfo(mapper.readTree(additionalInfo));
|
||||
tenantService.saveTenant(tenant);
|
||||
}
|
||||
}
|
||||
|
||||
private OAuth2ClientsParams validClientsParams() {
|
||||
OAuth2ClientRegistration first = validClientRegistration();
|
||||
OAuth2ClientRegistration second = validClientRegistration();
|
||||
return OAuth2ClientsParams.builder()
|
||||
.clientsDomainsParams(Collections.singletonList(
|
||||
OAuth2ClientsDomainParams.builder()
|
||||
.domainName(UUID.randomUUID().toString())
|
||||
.clientRegistrations(Arrays.asList(first, second))
|
||||
.build()
|
||||
))
|
||||
.build();
|
||||
}
|
||||
|
||||
private OAuth2ClientsParams validClientsParamsWithMultipleDomains() {
|
||||
OAuth2ClientRegistration first = validClientRegistration();
|
||||
OAuth2ClientRegistration second = validClientRegistration();
|
||||
OAuth2ClientRegistration third = validClientRegistration();
|
||||
return OAuth2ClientsParams.builder()
|
||||
.clientsDomainsParams(Arrays.asList(
|
||||
OAuth2ClientsDomainParams.builder()
|
||||
.domainName(UUID.randomUUID().toString())
|
||||
.clientRegistrations(Arrays.asList(first, second))
|
||||
.build(),
|
||||
OAuth2ClientsDomainParams.builder()
|
||||
.domainName(UUID.randomUUID().toString())
|
||||
.clientRegistrations(Arrays.asList(third))
|
||||
.build()
|
||||
))
|
||||
.build();
|
||||
}
|
||||
|
||||
|
||||
private OAuth2ClientsParams clientsParamsWithDuplicateDomains() {
|
||||
OAuth2ClientRegistration first = validClientRegistration();
|
||||
OAuth2ClientRegistration second = validClientRegistration();
|
||||
OAuth2ClientRegistration third = validClientRegistration();
|
||||
return OAuth2ClientsParams.builder()
|
||||
.clientsDomainsParams(Arrays.asList(
|
||||
OAuth2ClientsDomainParams.builder()
|
||||
.domainName("domain")
|
||||
.clientRegistrations(Collections.singletonList(first))
|
||||
.build(),
|
||||
OAuth2ClientsDomainParams.builder()
|
||||
.domainName("domain")
|
||||
.clientRegistrations(Collections.singletonList(second))
|
||||
.build(),
|
||||
OAuth2ClientsDomainParams.builder()
|
||||
.domainName(UUID.randomUUID().toString())
|
||||
.clientRegistrations(Collections.singletonList(third))
|
||||
.build()
|
||||
))
|
||||
.build();
|
||||
}
|
||||
|
||||
private OAuth2ClientsParams clientsParamsWithDuplicateRegistrationIds() {
|
||||
OAuth2ClientRegistration first = validClientRegistration();
|
||||
first.setRegistrationId("registrationId");
|
||||
OAuth2ClientRegistration second = validClientRegistration();
|
||||
OAuth2ClientRegistration third = validClientRegistration();
|
||||
third.setRegistrationId("registrationId");
|
||||
return OAuth2ClientsParams.builder()
|
||||
.clientsDomainsParams(Arrays.asList(
|
||||
OAuth2ClientsDomainParams.builder()
|
||||
.domainName(UUID.randomUUID().toString())
|
||||
.clientRegistrations(Arrays.asList(first, second, third))
|
||||
.build()
|
||||
))
|
||||
.build();
|
||||
}
|
||||
|
||||
private OAuth2ClientRegistration validClientRegistration() {
|
||||
return OAuth2ClientRegistration.builder()
|
||||
.registrationId(UUID.randomUUID().toString())
|
||||
.mapperConfig(OAuth2MapperConfig.builder()
|
||||
.allowUserCreation(true)
|
||||
.activateUser(true)
|
||||
.type(MapperType.CUSTOM)
|
||||
.customConfig(
|
||||
OAuth2CustomMapperConfig.builder()
|
||||
.url("localhost:8082")
|
||||
.username("test")
|
||||
.password("test")
|
||||
.build()
|
||||
)
|
||||
.build())
|
||||
.clientId("clientId")
|
||||
.clientSecret("clientSecret")
|
||||
.authorizationUri("authorizationUri")
|
||||
.tokenUri("tokenUri")
|
||||
.redirectUriTemplate("http://localhost:8080/login/oauth2/code/")
|
||||
.scope("scope")
|
||||
.authorizationGrantType("authorizationGrantType")
|
||||
.userInfoUri("userInfoUri")
|
||||
.userNameAttributeName("userNameAttributeName")
|
||||
.jwkSetUri("jwkSetUri")
|
||||
.clientAuthenticationMethod("clientAuthenticationMethod")
|
||||
.clientName("clientName")
|
||||
.loginButtonLabel("loginButtonLabel")
|
||||
.build();
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,23 @@
|
||||
/**
|
||||
* Copyright © 2016-2020 The Thingsboard Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.thingsboard.server.dao.service.sql;
|
||||
|
||||
import org.thingsboard.server.dao.service.BaseOAuth2ServiceTest;
|
||||
import org.thingsboard.server.dao.service.DaoSqlTest;
|
||||
|
||||
@DaoSqlTest
|
||||
public class OAuth2ServiceSqlTest extends BaseOAuth2ServiceTest {
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user