diff --git a/iam-login-service/src/main/resources/application-voms-test.yml b/iam-login-service/src/main/resources/application-voms-test.yml
new file mode 100644
index 000000000..7f09ff4eb
--- /dev/null
+++ b/iam-login-service/src/main/resources/application-voms-test.yml
@@ -0,0 +1,46 @@
+#
+# Copyright (c) Istituto Nazionale di Fisica Nucleare (INFN). 2016-2021
+#
+# 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.
+#
+
+spring:
+ profiles:
+ include: mysql
+ datasource:
+ dataSourceClassName: com.mysql.jdbc.jdbc2.optional.MysqlDataSource
+ url: jdbc:mysql://${IAM_DB_HOST:dev.local.io}:${IAM_DB_PORT:3306}/${IAM_DB_NAME:iam}?useSSL=${IAM_DB_USE_SSL:false}
+ username: ${IAM_DB_USERNAME:iam}
+ password: ${IAM_DB_PASSWORD:pwd}
+ max-active: 5
+ min-idle: 1
+ max-idle: 1
+ initial-size: 2
+ test-while-idle: true
+ test-on-borrow: true
+ validation-query: SELECT 1
+ time-between-eviction-runs-millis: 5000
+ min-evictable-idle-time-millis: 5000
+
+notification:
+ disable: true
+
+flyway:
+ locations:
+ - classpath:db/migration/mysql
+ - classpath:db/migration/voms-test
+
+management:
+ health:
+ mail:
+ enabled: false
diff --git a/iam-login-service/src/main/resources/logback-test.xml b/iam-login-service/src/main/resources/logback-test.xml
new file mode 100644
index 000000000..d5f1b6d2b
--- /dev/null
+++ b/iam-login-service/src/main/resources/logback-test.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
diff --git a/iam-persistence/pom.xml b/iam-persistence/pom.xml
index 7ccf173f6..308c28791 100644
--- a/iam-persistence/pom.xml
+++ b/iam-persistence/pom.xml
@@ -18,7 +18,7 @@
-->
+ xsi:schemaLocation="http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
it.infn.mw
diff --git a/iam-persistence/src/main/java/db/migration/h2/V23___CreateGroupManagerAuthorities.java b/iam-persistence/src/main/java/db/migration/h2/V23___CreateGroupManagerAuthorities.java
index d5c979315..643929b50 100644
--- a/iam-persistence/src/main/java/db/migration/h2/V23___CreateGroupManagerAuthorities.java
+++ b/iam-persistence/src/main/java/db/migration/h2/V23___CreateGroupManagerAuthorities.java
@@ -18,8 +18,8 @@
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
-import db.migration.tasks.CreateGroupManagerAuthorities;
import it.infn.mw.iam.persistence.migrations.BaseFlywayJavaMigrationAdapter;
+import it.infn.mw.iam.persistence.migrations.CreateGroupManagerAuthorities;
/**
*
diff --git a/iam-persistence/src/main/java/db/migration/h2/V34_2___RemoveOrphanTokens.java b/iam-persistence/src/main/java/db/migration/h2/V34_2___RemoveOrphanTokens.java
index 1009fc2ed..bb7a247d6 100644
--- a/iam-persistence/src/main/java/db/migration/h2/V34_2___RemoveOrphanTokens.java
+++ b/iam-persistence/src/main/java/db/migration/h2/V34_2___RemoveOrphanTokens.java
@@ -18,8 +18,8 @@
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
-import db.migration.tasks.RemoveOrphanTokens;
import it.infn.mw.iam.persistence.migrations.BaseFlywayJavaMigrationAdapter;
+import it.infn.mw.iam.persistence.migrations.RemoveOrphanTokens;
public class V34_2___RemoveOrphanTokens extends BaseFlywayJavaMigrationAdapter {
diff --git a/iam-persistence/src/main/java/db/migration/mysql/V23___CreateGroupManagerAuthorities.java b/iam-persistence/src/main/java/db/migration/mysql/V23___CreateGroupManagerAuthorities.java
index e46e1b3ac..bc9985fa6 100644
--- a/iam-persistence/src/main/java/db/migration/mysql/V23___CreateGroupManagerAuthorities.java
+++ b/iam-persistence/src/main/java/db/migration/mysql/V23___CreateGroupManagerAuthorities.java
@@ -20,8 +20,8 @@
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
-import db.migration.tasks.CreateGroupManagerAuthorities;
import it.infn.mw.iam.persistence.migrations.BaseFlywayJavaMigrationAdapter;
+import it.infn.mw.iam.persistence.migrations.CreateGroupManagerAuthorities;
public class V23___CreateGroupManagerAuthorities extends BaseFlywayJavaMigrationAdapter {
diff --git a/iam-persistence/src/main/java/db/migration/mysql/V34_2___RemoveOrphanTokens.java b/iam-persistence/src/main/java/db/migration/mysql/V34_2___RemoveOrphanTokens.java
index fc4c74ebc..bcb8b4ec1 100644
--- a/iam-persistence/src/main/java/db/migration/mysql/V34_2___RemoveOrphanTokens.java
+++ b/iam-persistence/src/main/java/db/migration/mysql/V34_2___RemoveOrphanTokens.java
@@ -18,8 +18,8 @@
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
-import db.migration.tasks.RemoveOrphanTokens;
import it.infn.mw.iam.persistence.migrations.BaseFlywayJavaMigrationAdapter;
+import it.infn.mw.iam.persistence.migrations.RemoveOrphanTokens;
public class V34_2___RemoveOrphanTokens extends BaseFlywayJavaMigrationAdapter {
diff --git a/iam-persistence/src/main/java/db/migration/test/V100000_1___CreateGroupManagerAuthorities.java b/iam-persistence/src/main/java/db/migration/test/V100000_1___CreateGroupManagerAuthorities.java
index 1a1bdd859..18f8a4d65 100644
--- a/iam-persistence/src/main/java/db/migration/test/V100000_1___CreateGroupManagerAuthorities.java
+++ b/iam-persistence/src/main/java/db/migration/test/V100000_1___CreateGroupManagerAuthorities.java
@@ -18,8 +18,8 @@
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
-import db.migration.tasks.CreateGroupManagerAuthorities;
import it.infn.mw.iam.persistence.migrations.BaseFlywayJavaMigrationAdapter;
+import it.infn.mw.iam.persistence.migrations.CreateGroupManagerAuthorities;
public class V100000_1___CreateGroupManagerAuthorities extends BaseFlywayJavaMigrationAdapter {
diff --git a/iam-persistence/src/main/java/db/migration/test/V100000_3___RemoveOrphanTokens.java b/iam-persistence/src/main/java/db/migration/test/V100000_3___RemoveOrphanTokens.java
index 2d8d3c9fb..ec165431e 100644
--- a/iam-persistence/src/main/java/db/migration/test/V100000_3___RemoveOrphanTokens.java
+++ b/iam-persistence/src/main/java/db/migration/test/V100000_3___RemoveOrphanTokens.java
@@ -18,8 +18,8 @@
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
-import db.migration.tasks.RemoveOrphanTokens;
import it.infn.mw.iam.persistence.migrations.BaseFlywayJavaMigrationAdapter;
+import it.infn.mw.iam.persistence.migrations.RemoveOrphanTokens;
public class V100000_3___RemoveOrphanTokens extends BaseFlywayJavaMigrationAdapter {
diff --git a/iam-persistence/src/main/java/db/migration/tasks/CreateGroupManagerAuthorities.java b/iam-persistence/src/main/java/it/infn/mw/iam/persistence/migrations/CreateGroupManagerAuthorities.java
similarity index 94%
rename from iam-persistence/src/main/java/db/migration/tasks/CreateGroupManagerAuthorities.java
rename to iam-persistence/src/main/java/it/infn/mw/iam/persistence/migrations/CreateGroupManagerAuthorities.java
index e87a990b6..b0c1402c6 100644
--- a/iam-persistence/src/main/java/db/migration/tasks/CreateGroupManagerAuthorities.java
+++ b/iam-persistence/src/main/java/it/infn/mw/iam/persistence/migrations/CreateGroupManagerAuthorities.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package db.migration.tasks;
+package it.infn.mw.iam.persistence.migrations;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -21,8 +21,6 @@
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.support.rowset.SqlRowSet;
-import it.infn.mw.iam.persistence.migrations.SpringJdbcFlywayMigration;
-
public class CreateGroupManagerAuthorities implements SpringJdbcFlywayMigration {
public static final Logger LOG = LoggerFactory.getLogger(CreateGroupManagerAuthorities.class);
diff --git a/iam-persistence/src/main/java/db/migration/tasks/RemoveOrphanTokens.java b/iam-persistence/src/main/java/it/infn/mw/iam/persistence/migrations/RemoveOrphanTokens.java
similarity index 95%
rename from iam-persistence/src/main/java/db/migration/tasks/RemoveOrphanTokens.java
rename to iam-persistence/src/main/java/it/infn/mw/iam/persistence/migrations/RemoveOrphanTokens.java
index 3100c999c..3d47227a4 100644
--- a/iam-persistence/src/main/java/db/migration/tasks/RemoveOrphanTokens.java
+++ b/iam-persistence/src/main/java/it/infn/mw/iam/persistence/migrations/RemoveOrphanTokens.java
@@ -1,5 +1,5 @@
/**
- * Copyright (c) Istituto Nazionale di Fisica Nucleare (INFN). 2016-2018
+ * Copyright (c) Istituto Nazionale di Fisica Nucleare (INFN). 2016-2021
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -13,15 +13,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package db.migration.tasks;
+package it.infn.mw.iam.persistence.migrations;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
-import it.infn.mw.iam.persistence.migrations.SpringJdbcFlywayMigration;
-
public class RemoveOrphanTokens implements SpringJdbcFlywayMigration {
public static final Logger LOG = LoggerFactory.getLogger(RemoveOrphanTokens.class);
diff --git a/iam-persistence/src/main/resources/db/migration/voms-test/V100000___voms_test_data.sql b/iam-persistence/src/main/resources/db/migration/voms-test/V100000___voms_test_data.sql
new file mode 100644
index 000000000..f23ae847e
--- /dev/null
+++ b/iam-persistence/src/main/resources/db/migration/voms-test/V100000___voms_test_data.sql
@@ -0,0 +1,81 @@
+INSERT INTO client_details (id, client_id, client_secret, client_name, dynamically_registered,
+ refresh_token_validity_seconds, access_token_validity_seconds, id_token_validity_seconds, allow_introspection,
+ token_endpoint_auth_method, require_auth_time) VALUES
+ (1, 'client', 'secret', 'Test Client', false, null, 3600, 600, true, 'SECRET_BASIC',false);
+
+INSERT INTO client_scope (owner_id, scope) VALUES
+ (1, 'openid'),
+ (1, 'profile'),
+ (1, 'email'),
+ (1, 'address'),
+ (1, 'phone'),
+ (1, 'offline_access'),
+ (1, 'read-tasks'),
+ (1, 'write-tasks'),
+ (1, 'read:/'),
+ (1, 'write:/'),
+ (1, 'attr');
+
+INSERT INTO client_grant_type (owner_id, grant_type) VALUES
+ (1, 'authorization_code'),
+ (1, 'urn:ietf:params:oauth:grant_type:redelegate'),
+ (1, 'implicit'),
+ (1, 'refresh_token');
+
+INSERT INTO iam_user_info(ID,GIVENNAME,FAMILYNAME, EMAIL, EMAILVERIFIED, BIRTHDATE, GENDER) VALUES
+(2, 'Test', 'User', 'test@iam.test', true, '1950-01-01','M');
+
+INSERT INTO iam_account(id, uuid, username, password, user_info_id, creationtime, lastupdatetime, active) VALUES
+(2, '80e5fb8d-b7c8-451a-89ba-346ae278a66f', 'test', '$2a$10$UZeOZKD1.dj5oiTsZKD03OETA9FXCKGqBuuijhsxYygZpOPtWMUni', 2, CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP(), true);
+
+INSERT INTO iam_oidc_id(issuer, subject, account_id) VALUES
+('https://accounts.google.com', '105440632287425289613', 2),
+('urn:test-oidc-issuer', 'test-user', 2);
+
+INSERT INTO iam_saml_id(idpid, attribute_id, userid, account_id) VALUES
+('https://idptestbed/idp/shibboleth', 'urn:oid:0.9.2342.19200300.100.1.3', 'andrea.ceccanti@example.org',2),
+('https://idptestbed/idp/shibboleth', 'urn:oid:1.3.6.1.4.1.5923.1.1.1.13', '78901@idptestbed',2);
+
+INSERT INTO iam_x509_cert(label,subject_dn,issuer_dn, is_primary,certificate,creation_time, last_update_time,account_id) VALUES
+('test0 cert', 'CN=test0,O=IGI,C=IT', 'CN=Test CA,O=IGI,C=IT',true,
+'-----BEGIN CERTIFICATE-----
+MIIDnjCCAoagAwIBAgIBCTANBgkqhkiG9w0BAQUFADAtMQswCQYDVQQGEwJJVDEM
+MAoGA1UECgwDSUdJMRAwDgYDVQQDDAdUZXN0IENBMB4XDTEyMDkyNjE1MzkzNFoX
+DTIyMDkyNDE1MzkzNFowKzELMAkGA1UEBhMCSVQxDDAKBgNVBAoTA0lHSTEOMAwG
+A1UEAxMFdGVzdDAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDKxtrw
+hoZ27SxxISjlRqWmBWB6U+N/xW2kS1uUfrQRav6auVtmtEW45J44VTi3WW6Y113R
+BwmS6oW+3lzyBBZVPqnhV9/VkTxLp83gGVVvHATgGgkjeTxIsOE+TkPKAoZJ/QFc
+CfPh3WdZ3ANI14WYkAM9VXsSbh2okCsWGa4o6pzt3Pt1zKkyO4PW0cBkletDImJK
+2vufuDVNm7Iz/y3/8pY8p3MoiwbF/PdSba7XQAxBWUJMoaleh8xy8HSROn7tF2al
+xoDLH4QWhp6UDn2rvOWseBqUMPXFjsUi1/rkw1oHAjMroTk5lL15GI0LGd5dTVop
+kKXFbTTYxSkPz1MLAgMBAAGjgcowgccwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQU
+fLdB5+jO9LyWN2/VCNYgMa0jvHEwDgYDVR0PAQH/BAQDAgXgMD4GA1UdJQQ3MDUG
+CCsGAQUFBwMBBggrBgEFBQcDAgYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBBggrBgEF
+BQcDBDAfBgNVHSMEGDAWgBSRdzZ7LrRp8yfqt/YIi0ojohFJxjAnBgNVHREEIDAe
+gRxhbmRyZWEuY2VjY2FudGlAY25hZi5pbmZuLml0MA0GCSqGSIb3DQEBBQUAA4IB
+AQANYtWXetheSeVpCfnId9TkKyKTAp8RahNZl4XFrWWn2S9We7ACK/G7u1DebJYx
+d8POo8ClscoXyTO2BzHHZLxauEKIzUv7g2GehI+SckfZdjFyRXjD0+wMGwzX7MDu
+SL3CG2aWsYpkBnj6BMlr0P3kZEMqV5t2+2Tj0+aXppBPVwzJwRhnrSJiO5WIZAZf
+49YhMn61sQIrepvhrKEUR4XVorH2Bj8ek1/iLlgcmFMBOds+PrehSRR8Gn0IjlEg
+C68EY6KPE+FKySuS7Ur7lTAjNdddfdAgKV6hJyST6/dx8ymIkb8nxCPnxCcT2I2N
+vDxcPMc/wmnMa+smNal0sJ6m
+-----END CERTIFICATE-----',
+CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP(),2);
+
+
+INSERT INTO iam_account_authority(account_id, authority_id) VALUES
+(2,2);
+
+-- test groups
+INSERT INTO iam_group(id, parent_group_id, name, uuid, description, creationtime, lastupdatetime) VALUES
+(1, null, 'indigo-dc', 'ff8b5c1e-c0d2-40d1-8216-9896f2570077', 'indigo-dc root group', CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP()),
+(2, 1, 'indigo-dc/subgroup', '28c829f0-9c16-43e7-82a0-ea893ec4fce5', 'indigo-dc subgroup', CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP()),
+(3, 1, 'indigo-dc/another-subgroup', 'e17ca24b-4772-4e64-a30e-49b394c91503', 'indigo-dc another-subgroup', CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP()),
+(4, 1, 'indigo-dc/production', 'e9dd63e1-af45-4691-99c4-2d2b5bf5d66a', 'indigo-dc production role', CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP()),
+(5, 2, 'indigo-dc/subgroup/production', '5bea3ff8-64a6-43a9-a1f5-3354587f68b9', 'indigo-dc subgroup production role', CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP()));
+
+-- test groups membership
+INSERT INTO iam_account_group(account_id, group_id) VALUES
+(2,1);
+
+
diff --git a/pom.xml b/pom.xml
index c5263210c..74c351e6e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -2,7 +2,7 @@
+ xsi:schemaLocation="http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
org.springframework.boot