From 0236a88fb454682608c28f7c21716d9288b56bec Mon Sep 17 00:00:00 2001
From: Florian Reimair <florian.reimair@iaik.tugraz.at>
Date: Mon, 3 Mar 2014 09:38:27 +0100
Subject: added tweaked stork2-commons source

---
 .../src/test/java/eu/.svn/all-wcprops              |   5 +
 .../stork2-commons/src/test/java/eu/.svn/entries   |  31 +
 .../src/test/java/eu/stork/.svn/all-wcprops        |   5 +
 .../src/test/java/eu/stork/.svn/entries            |  31 +
 .../src/test/java/eu/stork/peps/.svn/all-wcprops   |   5 +
 .../src/test/java/eu/stork/peps/.svn/entries       |  31 +
 .../test/java/eu/stork/peps/tests/.svn/all-wcprops |  53 ++
 .../src/test/java/eu/stork/peps/tests/.svn/entries | 300 +++++++++
 .../AttributeProvidersMapTestCase.java.svn-base    | 134 ++++
 .../AttributeSourceTestCase.java.svn-base          |  88 +++
 .../text-base/AttributeUtilTestCase.java.svn-base  | 537 +++++++++++++++
 .../.svn/text-base/DateUtilTestCase.java.svn-base  | 294 ++++++++
 .../.svn/text-base/PEPSUtilTestCase.java.svn-base  | 553 +++++++++++++++
 .../PersonalAttributeListTestCase.java.svn-base    | 747 +++++++++++++++++++++
 .../PersonalAttributeTestCase.java.svn-base        | 182 +++++
 .../.svn/text-base/package-info.java.svn-base      |   5 +
 .../peps/tests/AttributeProvidersMapTestCase.java  | 134 ++++
 .../stork/peps/tests/AttributeSourceTestCase.java  |  88 +++
 .../eu/stork/peps/tests/AttributeUtilTestCase.java | 537 +++++++++++++++
 .../java/eu/stork/peps/tests/DateUtilTestCase.java | 294 ++++++++
 .../java/eu/stork/peps/tests/PEPSUtilTestCase.java | 553 +++++++++++++++
 .../peps/tests/PersonalAttributeListTestCase.java  | 747 +++++++++++++++++++++
 .../peps/tests/PersonalAttributeTestCase.java      | 182 +++++
 .../java/eu/stork/peps/tests/package-info.java     |   5 +
 24 files changed, 5541 insertions(+)
 create mode 100644 id/server/stork2-commons/src/test/java/eu/.svn/all-wcprops
 create mode 100644 id/server/stork2-commons/src/test/java/eu/.svn/entries
 create mode 100644 id/server/stork2-commons/src/test/java/eu/stork/.svn/all-wcprops
 create mode 100644 id/server/stork2-commons/src/test/java/eu/stork/.svn/entries
 create mode 100644 id/server/stork2-commons/src/test/java/eu/stork/peps/.svn/all-wcprops
 create mode 100644 id/server/stork2-commons/src/test/java/eu/stork/peps/.svn/entries
 create mode 100644 id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/all-wcprops
 create mode 100644 id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/entries
 create mode 100644 id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/AttributeProvidersMapTestCase.java.svn-base
 create mode 100644 id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/AttributeSourceTestCase.java.svn-base
 create mode 100644 id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/AttributeUtilTestCase.java.svn-base
 create mode 100644 id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/DateUtilTestCase.java.svn-base
 create mode 100644 id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/PEPSUtilTestCase.java.svn-base
 create mode 100644 id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/PersonalAttributeListTestCase.java.svn-base
 create mode 100644 id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/PersonalAttributeTestCase.java.svn-base
 create mode 100644 id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/package-info.java.svn-base
 create mode 100644 id/server/stork2-commons/src/test/java/eu/stork/peps/tests/AttributeProvidersMapTestCase.java
 create mode 100644 id/server/stork2-commons/src/test/java/eu/stork/peps/tests/AttributeSourceTestCase.java
 create mode 100644 id/server/stork2-commons/src/test/java/eu/stork/peps/tests/AttributeUtilTestCase.java
 create mode 100644 id/server/stork2-commons/src/test/java/eu/stork/peps/tests/DateUtilTestCase.java
 create mode 100644 id/server/stork2-commons/src/test/java/eu/stork/peps/tests/PEPSUtilTestCase.java
 create mode 100644 id/server/stork2-commons/src/test/java/eu/stork/peps/tests/PersonalAttributeListTestCase.java
 create mode 100644 id/server/stork2-commons/src/test/java/eu/stork/peps/tests/PersonalAttributeTestCase.java
 create mode 100644 id/server/stork2-commons/src/test/java/eu/stork/peps/tests/package-info.java

(limited to 'id/server/stork2-commons/src/test/java/eu')

diff --git a/id/server/stork2-commons/src/test/java/eu/.svn/all-wcprops b/id/server/stork2-commons/src/test/java/eu/.svn/all-wcprops
new file mode 100644
index 000000000..51a31d6f6
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/.svn/all-wcprops
@@ -0,0 +1,5 @@
+K 25
+svn:wc:ra_dav:version-url
+V 62
+/CITnet/svn/STORK2/!svn/ver/484/trunk/Commons/src/test/java/eu
+END
diff --git a/id/server/stork2-commons/src/test/java/eu/.svn/entries b/id/server/stork2-commons/src/test/java/eu/.svn/entries
new file mode 100644
index 000000000..f649532fd
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/.svn/entries
@@ -0,0 +1,31 @@
+10
+
+dir
+665
+https://webgate.ec.europa.eu/CITnet/svn/STORK2/trunk/Commons/src/test/java/eu
+https://webgate.ec.europa.eu/CITnet/svn/STORK2
+
+
+
+2014-01-15T09:44:59.969756Z
+484
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+aa842e49-f825-43fc-93ba-11ee9fd5a035
+
+stork
+dir
+
diff --git a/id/server/stork2-commons/src/test/java/eu/stork/.svn/all-wcprops b/id/server/stork2-commons/src/test/java/eu/stork/.svn/all-wcprops
new file mode 100644
index 000000000..dece991f4
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/stork/.svn/all-wcprops
@@ -0,0 +1,5 @@
+K 25
+svn:wc:ra_dav:version-url
+V 68
+/CITnet/svn/STORK2/!svn/ver/484/trunk/Commons/src/test/java/eu/stork
+END
diff --git a/id/server/stork2-commons/src/test/java/eu/stork/.svn/entries b/id/server/stork2-commons/src/test/java/eu/stork/.svn/entries
new file mode 100644
index 000000000..ed1d5001e
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/stork/.svn/entries
@@ -0,0 +1,31 @@
+10
+
+dir
+665
+https://webgate.ec.europa.eu/CITnet/svn/STORK2/trunk/Commons/src/test/java/eu/stork
+https://webgate.ec.europa.eu/CITnet/svn/STORK2
+
+
+
+2014-01-15T09:44:59.969756Z
+484
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+aa842e49-f825-43fc-93ba-11ee9fd5a035
+
+peps
+dir
+
diff --git a/id/server/stork2-commons/src/test/java/eu/stork/peps/.svn/all-wcprops b/id/server/stork2-commons/src/test/java/eu/stork/peps/.svn/all-wcprops
new file mode 100644
index 000000000..57300d6a5
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/stork/peps/.svn/all-wcprops
@@ -0,0 +1,5 @@
+K 25
+svn:wc:ra_dav:version-url
+V 73
+/CITnet/svn/STORK2/!svn/ver/484/trunk/Commons/src/test/java/eu/stork/peps
+END
diff --git a/id/server/stork2-commons/src/test/java/eu/stork/peps/.svn/entries b/id/server/stork2-commons/src/test/java/eu/stork/peps/.svn/entries
new file mode 100644
index 000000000..5908857a7
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/stork/peps/.svn/entries
@@ -0,0 +1,31 @@
+10
+
+dir
+665
+https://webgate.ec.europa.eu/CITnet/svn/STORK2/trunk/Commons/src/test/java/eu/stork/peps
+https://webgate.ec.europa.eu/CITnet/svn/STORK2
+
+
+
+2014-01-15T09:44:59.969756Z
+484
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+aa842e49-f825-43fc-93ba-11ee9fd5a035
+
+tests
+dir
+
diff --git a/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/all-wcprops b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/all-wcprops
new file mode 100644
index 000000000..0bc94ebcd
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/all-wcprops
@@ -0,0 +1,53 @@
+K 25
+svn:wc:ra_dav:version-url
+V 79
+/CITnet/svn/STORK2/!svn/ver/484/trunk/Commons/src/test/java/eu/stork/peps/tests
+END
+PersonalAttributeTestCase.java
+K 25
+svn:wc:ra_dav:version-url
+V 109
+/CITnet/svn/STORK2/!svn/ver/19/trunk/Commons/src/test/java/eu/stork/peps/tests/PersonalAttributeTestCase.java
+END
+package-info.java
+K 25
+svn:wc:ra_dav:version-url
+V 96
+/CITnet/svn/STORK2/!svn/ver/19/trunk/Commons/src/test/java/eu/stork/peps/tests/package-info.java
+END
+DateUtilTestCase.java
+K 25
+svn:wc:ra_dav:version-url
+V 100
+/CITnet/svn/STORK2/!svn/ver/19/trunk/Commons/src/test/java/eu/stork/peps/tests/DateUtilTestCase.java
+END
+AttributeProvidersMapTestCase.java
+K 25
+svn:wc:ra_dav:version-url
+V 114
+/CITnet/svn/STORK2/!svn/ver/484/trunk/Commons/src/test/java/eu/stork/peps/tests/AttributeProvidersMapTestCase.java
+END
+AttributeUtilTestCase.java
+K 25
+svn:wc:ra_dav:version-url
+V 105
+/CITnet/svn/STORK2/!svn/ver/96/trunk/Commons/src/test/java/eu/stork/peps/tests/AttributeUtilTestCase.java
+END
+PersonalAttributeListTestCase.java
+K 25
+svn:wc:ra_dav:version-url
+V 114
+/CITnet/svn/STORK2/!svn/ver/484/trunk/Commons/src/test/java/eu/stork/peps/tests/PersonalAttributeListTestCase.java
+END
+AttributeSourceTestCase.java
+K 25
+svn:wc:ra_dav:version-url
+V 108
+/CITnet/svn/STORK2/!svn/ver/484/trunk/Commons/src/test/java/eu/stork/peps/tests/AttributeSourceTestCase.java
+END
+PEPSUtilTestCase.java
+K 25
+svn:wc:ra_dav:version-url
+V 100
+/CITnet/svn/STORK2/!svn/ver/96/trunk/Commons/src/test/java/eu/stork/peps/tests/PEPSUtilTestCase.java
+END
diff --git a/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/entries b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/entries
new file mode 100644
index 000000000..8a8c64359
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/entries
@@ -0,0 +1,300 @@
+10
+
+dir
+665
+https://webgate.ec.europa.eu/CITnet/svn/STORK2/trunk/Commons/src/test/java/eu/stork/peps/tests
+https://webgate.ec.europa.eu/CITnet/svn/STORK2
+
+
+
+2014-01-15T09:44:59.969756Z
+484
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+aa842e49-f825-43fc-93ba-11ee9fd5a035
+
+AttributeSourceTestCase.java
+file
+
+
+
+
+2014-01-21T08:38:55.140702Z
+28eeedf050cdff69d4d2cca83a98bcc8
+2014-01-15T09:44:59.969756Z
+484
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2363
+
+PEPSUtilTestCase.java
+file
+
+
+
+
+2013-12-20T12:27:56.518475Z
+f54beadeab9af936f44af326eb1116d2
+2013-11-01T20:35:30.927048Z
+96
+emferreri
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+16714
+
+PersonalAttributeTestCase.java
+file
+
+
+
+
+2013-12-20T12:27:56.518475Z
+77386880d5ffadd21c9b3a3c7d51b990
+2013-07-25T08:54:09.995385Z
+7
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+5449
+
+package-info.java
+file
+
+
+
+
+2013-12-20T12:27:56.518475Z
+04f136539bda0caa3d5ccdfee912cfce
+2013-07-25T08:54:09.995385Z
+7
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+92
+
+DateUtilTestCase.java
+file
+
+
+
+
+2013-12-20T12:27:56.518475Z
+244cc6104660a7835dbf72dadb305d71
+2013-07-25T08:54:09.995385Z
+7
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8907
+
+AttributeProvidersMapTestCase.java
+file
+
+
+
+
+2014-01-21T08:38:55.140702Z
+943e143bcc0ee8e573997e358859d6f2
+2014-01-15T09:44:59.969756Z
+484
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3809
+
+AttributeUtilTestCase.java
+file
+
+
+
+
+2013-12-20T12:27:56.518475Z
+6037f125adf7f4c2f6873a0d99ab0705
+2013-11-01T20:35:30.927048Z
+96
+emferreri
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+16318
+
+PersonalAttributeListTestCase.java
+file
+
+
+
+
+2014-01-21T08:38:55.140702Z
+ae552dce95a6b83d15e381306e2f5e59
+2014-01-15T09:44:59.969756Z
+484
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+24508
+
diff --git a/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/AttributeProvidersMapTestCase.java.svn-base b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/AttributeProvidersMapTestCase.java.svn-base
new file mode 100644
index 000000000..2e8cc2e62
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/AttributeProvidersMapTestCase.java.svn-base
@@ -0,0 +1,134 @@
+package eu.stork.peps.tests;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+import eu.stork.peps.auth.commons.AttributeProvider;
+import eu.stork.peps.auth.commons.AttributeProvidersMap;
+import eu.stork.peps.auth.commons.AttributeSource;
+import eu.stork.peps.auth.commons.Country;
+import eu.stork.peps.auth.commons.IAttributeProvidersMap;
+import eu.stork.peps.auth.commons.IPersonalAttributeList;
+import eu.stork.peps.auth.commons.PersonalAttributeList;
+
+/**
+ * The AttributeSource's Test Case.
+ * 
+ * @author Stelios Lelis (stelios.lelis@aegean.gr), Elias Pastos (ilias@aegean.gr)
+ * 
+ * @version $Revision: $, $Date: $
+ */
+public class AttributeProvidersMapTestCase {
+
+	@Test
+	public void testObjectOK1() {
+		IAttributeProvidersMap map = new AttributeProvidersMap();
+		AttributeSource source = new AttributeSource(new AttributeProvider("ID1", "Name 1"), "URL");
+		IPersonalAttributeList pal = new PersonalAttributeList();
+		boolean outcome = false;
+
+		//Add a single item
+		map.put(source, pal);
+
+		if ( map.containsKey(source) ) {
+			outcome = true;
+		}
+
+		assertTrue(outcome);
+	}
+
+	@Test
+	public void testObjectOK2() {
+		IAttributeProvidersMap map = new AttributeProvidersMap();
+		AttributeSource source = new AttributeSource(new AttributeProvider("ID1", "Name 1"), "URL");
+		IPersonalAttributeList pal = new PersonalAttributeList();
+		boolean outcome = false;
+
+		//Add a single item
+		map.put(source, pal);
+
+		if ( map.containsKey(source) ) {
+			if ( map.get(source)!=null ) {
+				outcome = true;
+			}
+		}
+
+		assertTrue(outcome);
+	}
+
+	@Test
+	public void testObjectOK3() {
+		IAttributeProvidersMap map = new AttributeProvidersMap();
+		AttributeSource source = new AttributeSource(new AttributeProvider("ID1", "Name 1"), "URL");
+		AttributeSource target = new AttributeSource(new AttributeProvider("ID1", "Name 1"), "URL");
+		IPersonalAttributeList pal = new PersonalAttributeList();
+		boolean outcome = false;
+
+		//Add a single item
+		map.put(source, pal);
+
+		if ( map.containsKey(target) ) {
+			outcome = true;
+		}
+
+		assertTrue(outcome);
+	}
+
+	@Test
+	public void testObjectOK4() {
+		IAttributeProvidersMap map = new AttributeProvidersMap();
+		AttributeSource source = new AttributeSource(new AttributeProvider("ID1", "Name 1"), "URL");
+		AttributeSource target = new AttributeSource(new AttributeProvider("ID1", "Name 1"), "URL");
+		IPersonalAttributeList pal = new PersonalAttributeList();
+		boolean outcome = false;
+
+		//Add a single item
+		map.put(source, pal);
+
+		if ( map.containsKey(target) ) {
+			if ( map.get(target)!=null ) {
+				outcome = true;
+			}
+		}
+
+		assertTrue(outcome);
+	}
+
+	@Test
+	public void testObjectNOK1() {
+		IAttributeProvidersMap map = new AttributeProvidersMap();
+		AttributeSource source = new AttributeSource(new AttributeProvider("ID1", "Name 1"), "URL");
+		AttributeSource target = new AttributeSource(new Country("ID1", "Name 1"), "URL");
+		IPersonalAttributeList pal = new PersonalAttributeList();
+		boolean outcome = false;
+
+		//Add a single item
+		map.put(source, pal);
+
+		if ( map.containsKey(target) ) {
+			outcome = true;
+		}
+
+		assertFalse(outcome);
+	}
+
+	@Test
+	public void testObjectNOK2() {
+		IAttributeProvidersMap map = new AttributeProvidersMap();
+		AttributeSource source = new AttributeSource(new AttributeProvider("ID1", "Name 1"), "URL");
+		AttributeSource target = new AttributeSource(new AttributeProvider("ID2", "Name 1"), "URL");
+		IPersonalAttributeList pal = new PersonalAttributeList();
+		boolean outcome = false;
+
+		//Add a single item
+		map.put(source, pal);
+
+		if ( map.containsKey(target) ) {
+			outcome = true;
+		}
+
+		assertFalse(outcome);
+	}
+}
diff --git a/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/AttributeSourceTestCase.java.svn-base b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/AttributeSourceTestCase.java.svn-base
new file mode 100644
index 000000000..31cabb612
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/AttributeSourceTestCase.java.svn-base
@@ -0,0 +1,88 @@
+package eu.stork.peps.tests;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+import eu.stork.peps.auth.commons.AttributeProvider;
+import eu.stork.peps.auth.commons.AttributeSource;
+import eu.stork.peps.auth.commons.Country;
+
+/**
+ * The AttributeSource's Test Case.
+ * 
+ * @author Stelios Lelis (stelios.lelis@aegean.gr), Elias Pastos (ilias@aegean.gr)
+ * 
+ * @version $Revision: $, $Date: $
+ */
+public final class AttributeSourceTestCase {
+	private AttributeSource ap1 = new AttributeSource(new AttributeProvider("ID1", "Name 1"), "URL1");
+	private AttributeSource ap2 = new AttributeSource(new AttributeProvider("ID2", "Name 2"), "URL2");
+	private AttributeSource ap3 = new AttributeSource(new AttributeProvider("ID1", "Name 2"), "URL2");
+	private AttributeSource ap4 = new AttributeSource(new AttributeProvider("ID1", "Name 2"), "URL1");
+	private AttributeSource ap5 = new AttributeSource(new AttributeProvider("ID1", "Name 1"), "URL1");
+
+	private AttributeSource c1 = new AttributeSource(new Country("ID1", "Name 1"), "URL1");
+	private AttributeSource c2 = new AttributeSource(new Country("ID2", "Name 2"), "URL2");
+	private AttributeSource c3 = new AttributeSource(new Country("ID1", "Name 2"), "URL2");
+	private AttributeSource c4 = new AttributeSource(new Country("ID1", "Name 2"), "URL1");
+	private AttributeSource c5 = new AttributeSource(new Country("ID1", "Name 1"), "URL1");
+
+	@Test
+	public void testNotEquals1() {
+		assertFalse(ap1.equals(ap2));
+	}
+
+	@Test
+	public void testNotEquals2() {
+		assertFalse(ap1.equals(c1));
+	}
+
+	@Test
+	public void testNotEquals3() {
+		assertFalse(c1.equals(c2));
+	}
+
+	@Test
+	public void testEquals1() {
+		assertTrue(ap1.equals(ap3));
+	}
+
+	@Test
+	public void testEquals2() {
+		assertTrue(ap1.equals(ap4));
+	}
+
+	@Test
+	public void testEquals3() {
+		assertTrue(ap1.equals(ap5));
+	}
+
+	@Test
+	public void testEquals4() {
+		assertTrue(c1.equals(c3));
+	}
+
+	@Test
+	public void testEquals5() {
+		assertTrue(c1.equals(c4));
+	}
+
+	@Test
+	public void testEquals6() {
+		assertTrue(c1.equals(c5));
+	}
+
+	@Test
+	public void testEquals7() {
+		Object obj = ap5;
+		assertTrue(ap1.equals(obj));
+	}
+
+	@Test
+	public void testEquals8() {
+		Object obj = c5;
+		assertTrue(c1.equals(obj));
+	}
+}
diff --git a/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/AttributeUtilTestCase.java.svn-base b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/AttributeUtilTestCase.java.svn-base
new file mode 100644
index 000000000..77fc4b9c2
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/AttributeUtilTestCase.java.svn-base
@@ -0,0 +1,537 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * 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 eu.stork.peps.tests;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertEquals;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.junit.Test;
+
+import eu.stork.peps.auth.commons.AttributeUtil;
+import eu.stork.peps.auth.commons.IPersonalAttributeList;
+import eu.stork.peps.auth.commons.PEPSValues;
+import eu.stork.peps.auth.commons.PersonalAttributeList;
+
+/**
+ * The AttributeUtil's Test Case.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com
+ * 
+ * @version $Revision: $, $Date: $
+ */
+public final class AttributeUtilTestCase {
+  
+  /**
+   * Empty String to be used on the tests.
+   */
+  private static final String EMPTY_STRING = "";
+  
+  /**
+   * Tuple value sample to be used on the tests.
+   */
+  private static final String[] TUPLE_STRING = new String[] { "age", "true",
+    "[18]", "Available" };
+  
+  /**
+   * Complex value to be used on escape/unescape tests.
+   */
+  private static final String COMPLEX_VAL = "postalCode=4100,"
+    + "apartmentNumber=A,state=Porto,countryCodeAddress=PT,streetNumber=379,"
+    + "streetName=Avenida Sidonio Pais,town=Porto,";
+  
+  /**
+   * Escaped Complex value to be used on escape/unescape tests.
+   */
+  private static final String ESC_COMPLEX_VAL = "postalCode=4100%44"
+    + "apartmentNumber=A%44state=Porto%44countryCodeAddress=PT%44"
+    + "streetNumber=379%44streetName=Avenida Sidonio Pais%44town=Porto%44";
+  
+  /**
+   * Simple value to be used on escape/unescape tests.
+   */
+  private static final String SIMPLE_VAL = "Avenida da Boavista, Porto";
+  
+  /**
+   * Escaped simple value to be used on escape/unescape tests.
+   */
+  private static final String ESC_SIMPLE_VAL = "Avenida da Boavista%44 Porto";
+  
+  /**
+   * Simple text to be used on escape/unescape tests. Must match the escaped
+   * text.
+   */
+  private static final String SIMPLE_TEXT = "John Doe";
+  
+  /**
+   * Tests the {@link AttributeUtil#escape(String)} method for the given complex
+   * attribute value (canonical address' example attribute value).
+   */
+  @Test
+  public void testEscapeSpecialCharsComplexVal() {
+    assertEquals(AttributeUtil.escape(COMPLEX_VAL), ESC_COMPLEX_VAL);
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#escape(String)} method for the given
+   * attribute value.
+   */
+  @Test
+  public void testEscapeSpecialCharsVal() {
+    assertEquals(AttributeUtil.escape(SIMPLE_VAL), ESC_SIMPLE_VAL);
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#escape(String)} method for the given simple
+   * text: no special characters to escape.
+   */
+  @Test
+  public void testEscapeNormalChars() {
+    assertEquals(AttributeUtil.escape(SIMPLE_TEXT), SIMPLE_TEXT);
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#unescape(String)} method for the given
+   * escape complex attribute value (canonical address' example attribute
+   * value).
+   */
+  @Test
+  public void testUnescapeSpecialCharsComplexVal() {
+    assertEquals(AttributeUtil.unescape(ESC_COMPLEX_VAL), COMPLEX_VAL);
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#escape(String)} method for the given escape
+   * attribute value.
+   */
+  @Test
+  public void testUnescapeSpecialCharsVal() {
+    assertEquals(AttributeUtil.unescape(ESC_SIMPLE_VAL), SIMPLE_VAL);
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#escape(String)} method for the given simple
+   * text: no special characters to unescape.
+   */
+  @Test
+  public void testUnescapeNormalChars() {
+    assertEquals(AttributeUtil.unescape(SIMPLE_TEXT), SIMPLE_TEXT);
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#appendIfNotNull(StringBuilder, Object)}
+   * method for the given empty string.
+   */
+  @Test
+  public void testAppendIfNotNullEmptyStr() {
+    final StringBuilder strBuilder = new StringBuilder(SIMPLE_TEXT);
+    AttributeUtil.appendIfNotNull(strBuilder, EMPTY_STRING);
+    assertEquals(strBuilder.toString(), SIMPLE_TEXT);
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#appendIfNotNull(StringBuilder, Object)}
+   * method for the given string.
+   */
+  @Test
+  public void testAppendIfNotNullStr() {
+    final StringBuilder strBuilder = new StringBuilder();
+    AttributeUtil.appendIfNotNull(strBuilder, SIMPLE_TEXT);
+    assertEquals(strBuilder.toString(), SIMPLE_TEXT);
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#appendIfNotNull(StringBuilder, Object)}
+   * method for the given null value.
+   */
+  @Test
+  public void testAppendIfNotNull() {
+    final StringBuilder strBuilder = new StringBuilder();
+    AttributeUtil.appendIfNotNull(strBuilder, null);
+    assertEquals(strBuilder.toString(), EMPTY_STRING);
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#listToString(List, String)} method for the
+   * given List with two values.
+   */
+  @Test
+  public void testListToStringTwoVals() {
+    final List<String> vals = new ArrayList<String>();
+    vals.add(SIMPLE_VAL);
+    vals.add(SIMPLE_TEXT);
+    
+    final StringBuilder strBuilder = new StringBuilder();
+    strBuilder.append(ESC_SIMPLE_VAL);
+    strBuilder.append(PEPSValues.ATTRIBUTE_VALUE_SEP.toString());
+    strBuilder.append(SIMPLE_TEXT);
+    strBuilder.append(PEPSValues.ATTRIBUTE_VALUE_SEP.toString());
+    
+    assertEquals(
+      AttributeUtil.listToString(vals,
+        PEPSValues.ATTRIBUTE_VALUE_SEP.toString()), strBuilder.toString());
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#listToString(List, String)} method for the
+   * given List with one values.
+   */
+  @Test
+  public void testListToStringOneVal() {
+    final List<String> vals = new ArrayList<String>();
+    vals.add(SIMPLE_VAL);
+    
+    final StringBuilder strBuilder = new StringBuilder();
+    strBuilder.append(ESC_SIMPLE_VAL);
+    strBuilder.append(PEPSValues.ATTRIBUTE_VALUE_SEP.toString());
+    
+    assertEquals(
+      AttributeUtil.listToString(vals,
+        PEPSValues.ATTRIBUTE_VALUE_SEP.toString()), strBuilder.toString());
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#listToString(List, String)} method for the
+   * given List with one value.
+   */
+  @Test
+  public void testListToStringEmptyVal() {
+    final List<String> vals = new ArrayList<String>();
+    
+    final StringBuilder strBuilder = new StringBuilder();
+    
+    assertEquals(
+      AttributeUtil.listToString(vals,
+        PEPSValues.ATTRIBUTE_VALUE_SEP.toString()), strBuilder.toString());
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#mapToString(java.util.Map, String)} method
+   * for the given Map with one value.
+   */
+  @Test
+  public void testMapToStringOneVal() {
+    final Map<String, String> vals = new HashMap<String, String>();
+    vals.put("CanonicalAddress", COMPLEX_VAL);
+    
+    final StringBuilder strBuilder = new StringBuilder();
+    strBuilder.append("CanonicalAddress=");
+    strBuilder.append(ESC_COMPLEX_VAL);
+    strBuilder.append(PEPSValues.ATTRIBUTE_VALUE_SEP.toString());
+    
+    assertEquals(AttributeUtil.mapToString(vals,
+      PEPSValues.ATTRIBUTE_VALUE_SEP.toString()), strBuilder.toString());
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#mapToString(java.util.Map, String)} method
+   * for the given empty Map.
+   */
+  @Test
+  public void testMapToStringEmptyVal() {
+    final Map<String, String> vals = new HashMap<String, String>();
+    
+    final StringBuilder strBuilder = new StringBuilder();
+    
+    assertEquals(AttributeUtil.mapToString(vals,
+      PEPSValues.ATTRIBUTE_VALUE_SEP.toString()), strBuilder.toString());
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidValue(String)} method for the given
+   * invalid List.
+   */
+  @Test
+  public void testIsValidValueInvalidList() {
+    final StringBuilder strBuilder = new StringBuilder();
+    strBuilder.append(ESC_SIMPLE_VAL);
+    strBuilder.append("]");
+    assertFalse(AttributeUtil.isValidValue(strBuilder.toString()));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidValue(String)} method for the given
+   * null value.
+   */
+  @Test
+  public void testIsValidValueNullList() {
+    assertFalse(AttributeUtil.isValidValue(null));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidValue(String)} method for the given
+   * empty List.
+   */
+  @Test
+  public void testIsValidValueEmptyList() {
+    assertTrue(AttributeUtil.isValidValue("[]"));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidValue(String)} method for the given
+   * empty List.
+   */
+  @Test
+  public void testIsValidValueEmptyCommaList() {
+    assertTrue(AttributeUtil.isValidValue("[,]"));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidValue(String)} method for the given
+   * one simple value List.
+   */
+  @Test
+  public void testIsValidValueOneValueList() {
+    final StringBuilder strBuilder = new StringBuilder();
+    strBuilder.append("[");
+    strBuilder.append(ESC_SIMPLE_VAL);
+    strBuilder.append("]");
+    assertTrue(AttributeUtil.isValidValue(strBuilder.toString()));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidValue(String)} method for the given
+   * one simple value List.
+   */
+  @Test
+  public void testIsValidValueOneValueCommaList() {
+    final StringBuilder strBuilder = new StringBuilder();
+    strBuilder.append("[");
+    strBuilder.append(ESC_SIMPLE_VAL);
+    strBuilder.append(PEPSValues.ATTRIBUTE_VALUE_SEP.toString());
+    strBuilder.append("]");
+    assertTrue(AttributeUtil.isValidValue(strBuilder.toString()));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidValue(String)} method for the given
+   * one complex value List.
+   */
+  @Test
+  public void testIsValidValueOneComplexValueList() {
+    final StringBuilder strBuilder = new StringBuilder();
+    strBuilder.append("[");
+    strBuilder.append(ESC_COMPLEX_VAL);
+    strBuilder.append("]");
+    assertTrue(AttributeUtil.isValidValue(strBuilder.toString()));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidValue(String)} method for the given
+   * one complex value List.
+   */
+  @Test
+  public void testIsValidValueOneComplexValueCommaList() {
+    final StringBuilder strBuilder = new StringBuilder();
+    strBuilder.append("[");
+    strBuilder.append(ESC_COMPLEX_VAL);
+    strBuilder.append(PEPSValues.ATTRIBUTE_VALUE_SEP.toString());
+    strBuilder.append("]");
+    assertTrue(AttributeUtil.isValidValue(strBuilder.toString()));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidValue(String)} method for the given
+   * multi value List.
+   */
+  @Test
+  public void testIsValidValueMultiValueList() {
+    final StringBuilder strBuilder = new StringBuilder();
+    strBuilder.append("[");
+    strBuilder.append(ESC_SIMPLE_VAL);
+    strBuilder.append(PEPSValues.ATTRIBUTE_VALUE_SEP.toString());
+    strBuilder.append(SIMPLE_TEXT);
+    strBuilder.append(PEPSValues.ATTRIBUTE_VALUE_SEP.toString());
+    strBuilder.append("]");
+    assertTrue(AttributeUtil.isValidValue(strBuilder.toString()));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidValue(String)} method for the given
+   * invalid multi value List.
+   */
+  @Test
+  public void testIsValidValueInvalidMultiValueList() {
+    final StringBuilder strBuilder = new StringBuilder();
+    strBuilder.append(ESC_SIMPLE_VAL);
+    strBuilder.append(PEPSValues.ATTRIBUTE_VALUE_SEP.toString());
+    strBuilder.append(SIMPLE_TEXT);
+    strBuilder.append(PEPSValues.ATTRIBUTE_VALUE_SEP.toString());
+    strBuilder.append("]");
+    assertFalse(AttributeUtil.isValidValue(strBuilder.toString()));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidType(String)} method for the given
+   * true type.
+   */
+  @Test
+  public void testIsValidTypetrue() {
+    assertTrue(AttributeUtil.isValidType("true"));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidType(String)} method for the given
+   * True type.
+   */
+  @Test
+  public void testIsValidTypeTrue() {
+    assertTrue(AttributeUtil.isValidType("True"));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidType(String)} method for the given
+   * TRUE type.
+   */
+  @Test
+  public void testIsValidTypeTRUE() {
+    assertTrue(AttributeUtil.isValidType("TRUE"));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidType(String)} method for the given
+   * invalid type.
+   */
+  @Test
+  public void testIsValidTypeInvalidType() {
+    assertFalse(AttributeUtil.isValidType("str"));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidType(String)} method for the given
+   * false type.
+   */
+  @Test
+  public void testIsValidTypefalse() {
+    assertTrue(AttributeUtil.isValidType("false"));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidType(String)} method for the given
+   * False type.
+   */
+  @Test
+  public void testIsValidTypeFalse() {
+    assertTrue(AttributeUtil.isValidType("False"));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidType(String)} method for the given
+   * FALSE type.
+   */
+  @Test
+  public void testIsValidTypeFALSEVal() {
+    assertTrue(AttributeUtil.isValidType("False"));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidType(String)} method for the given
+   * null.
+   */
+  @Test
+  public void testIsValidTypeNullVal() {
+    assertFalse(AttributeUtil.isValidType(null));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#hasValidTuples(String[])} method for the
+   * given valid tuple.
+   */
+  @Test
+  public void testHasValidTuples() {
+    assertTrue(AttributeUtil.hasValidTuples(TUPLE_STRING));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#hasValidTuples(String[])} method for the
+   * given invalid tuple. 
+   */
+  @Test
+  public void testHasValidTuplesInvalid() {
+    final String[] tuple = new String[]{"name", "type"};
+    assertFalse(AttributeUtil.hasValidTuples(tuple));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#hasValidTuples(String[])} method for the
+   * given invalid tuple with valid size.
+   */
+  @Test
+  public void testHasValidTuplesSameSizeInvalidValues() {
+    final String[] tuple = new String[] { "age", "type", "[18]", "Available"};
+    assertFalse(AttributeUtil.hasValidTuples(tuple));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#hasValidTuples(String[])} method for the
+   * given null value.
+   */
+  @Test
+  public void testHasValidTuplesNull() {
+    assertFalse(AttributeUtil.hasValidTuples(null));
+  }
+  
+  /**
+   * Tests the
+   * {@link AttributeUtil#checkMandatoryAttributes(IPersonalAttributeList)}
+   * method for the given attribute list..
+   */
+  @Test
+  public void testCheckMandatoryAttributes() {
+    final IPersonalAttributeList attrList = new PersonalAttributeList();
+    attrList.populate("isAgeOver:true:[18,]:Available;");
+    assertTrue(AttributeUtil.checkMandatoryAttributes(attrList));
+    
+  }
+  
+  /**
+   * Tests the
+   * {@link AttributeUtil#checkMandatoryAttributes(IPersonalAttributeList)}
+   * method for the given null value.
+   */
+  @Test(expected = NullPointerException.class)
+  public void testCheckMandatoryAttributesNullAttrList() {
+    assertTrue(AttributeUtil.checkMandatoryAttributes(null));
+  }
+  
+  /**
+   * Tests the
+   * {@link AttributeUtil#checkMandatoryAttributes(IPersonalAttributeList)}
+   * method for the given empty attribute list.
+   */
+  @Test
+  public void testCheckMandatoryAttributesEmptyAttrList() {
+    final IPersonalAttributeList attrList = new PersonalAttributeList();
+    assertTrue(AttributeUtil.checkMandatoryAttributes(attrList));
+  }
+  
+  /**
+   * Tests the
+   * {@link AttributeUtil#checkMandatoryAttributes(IPersonalAttributeList)}
+   * method for the given attribute list (missing mandatory attribute).
+   */
+  @Test
+  public void testCheckMandatoryAttributesMissingAttr() {
+    final IPersonalAttributeList attrList = new PersonalAttributeList();
+    attrList.populate("isAgeOver:true:[]:NotAvailable;");
+    assertFalse(AttributeUtil.checkMandatoryAttributes(attrList));
+  }
+  
+}
diff --git a/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/DateUtilTestCase.java.svn-base b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/DateUtilTestCase.java.svn-base
new file mode 100644
index 000000000..5d2296997
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/DateUtilTestCase.java.svn-base
@@ -0,0 +1,294 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * 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 eu.stork.peps.tests;
+
+import java.sql.Timestamp;
+import java.util.Properties;
+
+import org.joda.time.DateTime;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import eu.stork.peps.auth.commons.DateUtil;
+import eu.stork.peps.auth.commons.PEPSUtil;
+import eu.stork.peps.auth.commons.exceptions.SecurityPEPSException;
+
+/**
+ * The PersonalAttribute's Test Case.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.2 $, $Date: 2010-11-17 05:17:03 $
+ */
+public final class DateUtilTestCase {
+  
+  /**
+   * Stork Format date.
+   */
+  private static final String FORMAT = "yyyyMMdd";
+  
+  /**
+   * Expected 10 value.
+   */
+  private static final int TEN = 10;
+  
+  /**
+   * Expected 11 value.
+   */
+  private static final int ELEVEN = 11;
+  
+  /**
+   * The testing Date ("current" date).
+   */
+  private static final DateTime TESTDATE = new DateTime(2011, 10, 10, 15, 20,
+    0, 0);
+  
+  /**
+   * Init DateUtilTestCase class.
+   */
+  @BeforeClass
+  public static void runsBeforeTheTestSuite() {
+    final Properties configs = new Properties();
+    configs.setProperty("invalidAgeDateValue.code", "35");
+    configs.setProperty("invalidAttributeValue.code", "34");
+    configs
+      .setProperty(
+        "invalidAttributeValue.message",
+        "Unexpected or invalid content was encountered within a "
+        + "<saml:Attribute> or <saml:AttributeValue> element.");
+    PEPSUtil.createInstance(configs);
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given year against
+   * the testDate: 2011-10-10 15:20:00.0. Must return 10.
+   */
+  @Test
+  public void calculateAgeFromYear() {
+    Assert.assertTrue(TEN == DateUtil.calculateAge("2000", TESTDATE, FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given year and month
+   * against the testDate: 2011-10-10 15:20:00.0. Must return 11.
+   */
+  @Test
+  public void calculateAgeFromEarlyMonth() {
+    Assert.assertTrue(ELEVEN == DateUtil.calculateAge("200001", TESTDATE,
+      FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given year and month
+   * against the testDate: 2011-10-10 15:20:00.0. Must return 10.
+   */
+  @Test
+  public void calculateAgeFromSameMonth() {
+    Assert.assertTrue(TEN == DateUtil.calculateAge("200010", TESTDATE, FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given year and month
+   * against the testDate: 2011-10-10 15:20:00.0. Must return 10.
+   */
+  @Test
+  public void calculateAgeFromLaterMonth() {
+    Assert.assertTrue(TEN == DateUtil.calculateAge("200011", TESTDATE, FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given full date
+   * against the testDate: 2011-10-10 15:20:00.0. Must return 11.
+   */
+  @Test
+  public void calculateAgeFromEarlyFullDate() {
+    Assert.assertTrue(ELEVEN == DateUtil.calculateAge("20000101", TESTDATE,
+      FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given full date
+   * against the testDate: 2011-10-10 15:20:00.0. Must return 11.
+   */
+  @Test
+  public void calculateAgeFromSameDay() {
+    Assert.assertTrue(ELEVEN == DateUtil.calculateAge("20001010", TESTDATE,
+      FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given full date
+   * against the testDate: 2011-10-10 15:20:00.0. Must return 10.
+   */
+  @Test
+  public void calculateAgeFromLaterFullDate() {
+    Assert.assertTrue(TEN == DateUtil
+      .calculateAge("20001011", TESTDATE, FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given full date
+   * against the testDate: 2011-10-10 15:20:00.0. Must return a
+   * SecurityPEPSException exception.
+   */
+  @Test(expected = SecurityPEPSException.class)
+  public void calculateAgeFromInvalidDate() {
+    DateUtil.calculateAge("200", TESTDATE, FORMAT);
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given full date
+   * against the testDate: 2011-10-10 15:20:00.0. Must return a
+   * SecurityPEPSException exception.
+   */
+  @Test(expected = SecurityPEPSException.class)
+  public void calculateAgeFromInvalidMonth() {
+    DateUtil.calculateAge("200013", TESTDATE, FORMAT);
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given full date
+   * against the testDate: 2011-10-10 15:20:00.0. Must return a
+   * SecurityPEPSException exception.
+   */
+  @Test(expected = SecurityPEPSException.class)
+  public void calculateAgeFromInvalidDay() {
+    DateUtil.calculateAge("20000230", TESTDATE, FORMAT);
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given full date
+   * against the testDate: 2011-10-10 15:20:00.0. Must return a
+   * SecurityPEPSException exception.
+   */
+  @Test(expected = SecurityPEPSException.class)
+  public void calculateAgeFromNullDate() {
+    DateUtil.calculateAge(null, TESTDATE, FORMAT);
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given full date
+   * against the testDate: 2011-10-10 15:20:00.0. Must return a
+   * SecurityPEPSException exception.
+   */
+  @Test(expected = SecurityPEPSException.class)
+  public void calculateAgeFromNullCurDate() {
+    DateUtil.calculateAge("2000", null, FORMAT);
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given full date
+   * against the testDate: 2011-10-10 15:20:00.0. Must return a
+   * SecurityPEPSException exception.
+   */
+  @Test(expected = SecurityPEPSException.class)
+  public void calculateAgeFromNullFormat() {
+    DateUtil.calculateAge("2000", TESTDATE, null);
+  }
+  
+  /**
+   * Tests the {@link DateUtil#isValidFormatDate} method for the given year.
+   * Must return true
+   */
+  @Test
+  public void isValidFormatDateFromYear() {
+    Assert.assertTrue(DateUtil.isValidFormatDate("2000", FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#isValidFormatDate} method for the given year and
+   * month. Must return true.
+   */
+  @Test
+  public void isValidFormatDateFromMonth() {
+    Assert.assertTrue(DateUtil.isValidFormatDate("200001", FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#isValidFormatDate} method for the given year.
+   * Must return false.
+   */
+  @Test
+  public void isValidFormatDate() {
+    Assert.assertTrue(DateUtil.isValidFormatDate("20000101", FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#isValidFormatDate} method for the given year.
+   * Must return false.
+   */
+  @Test
+  public void isValidFormatDateInvalidYear() {
+    Assert.assertFalse(DateUtil.isValidFormatDate("200", FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#isValidFormatDate} method for the given year.
+   * Must return false.
+   */
+  @Test
+  public void isValidFormatDateInvalidMonth() {
+    Assert.assertFalse(DateUtil.isValidFormatDate("200013", FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#isValidFormatDate} method for the given year.
+   * Must return false.
+   */
+  @Test
+  public void isValidFormatDateInvalidDate() {
+    Assert.assertFalse(DateUtil.isValidFormatDate("20010229", FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#isValidFormatDate} method for the given year.
+   * Must return false.
+   */
+  @Test
+  public void isValidFormatDateNullDate() {
+    Assert.assertFalse(DateUtil.isValidFormatDate(null, FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#isValidFormatDate} method for the given year.
+   * Must return false.
+   */
+  @Test
+  public void isValidFormatDateNullFormat() {
+    Assert.assertFalse(DateUtil.isValidFormatDate("2000", null));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#currentTimeStamp()} method for the current
+   * TimeStamp (TS). Must return true.
+   */
+  @Test
+  public void testCurrentTimeStampBefore() {
+    Timestamp ts = DateUtil.currentTimeStamp();
+    Assert.assertNotSame(ts, DateUtil.currentTimeStamp());
+  }
+  
+  /**
+   * Tests the {@link DateUtil#currentTimeStamp()} method for the current
+   * TimeStamp (TS). Must return true.
+   */
+  @Test
+  public void testCurrentTimeStampAfter() {
+    Timestamp ts = DateUtil.currentTimeStamp();
+    Assert.assertEquals(DateUtil.currentTimeStamp(), ts);
+  }
+  
+}
diff --git a/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/PEPSUtilTestCase.java.svn-base b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/PEPSUtilTestCase.java.svn-base
new file mode 100644
index 000000000..d4841ed43
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/PEPSUtilTestCase.java.svn-base
@@ -0,0 +1,553 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * 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 eu.stork.peps.tests;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotSame;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertFalse;
+
+import java.util.Properties;
+
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import eu.stork.peps.auth.commons.IPersonalAttributeList;
+import eu.stork.peps.auth.commons.PEPSErrors;
+import eu.stork.peps.auth.commons.PEPSParameters;
+import eu.stork.peps.auth.commons.PEPSUtil;
+import eu.stork.peps.auth.commons.PersonalAttributeList;
+import eu.stork.peps.auth.commons.exceptions.InternalErrorPEPSException;
+import eu.stork.peps.auth.commons.exceptions.InvalidParameterPEPSException;
+
+/**
+ * The PEPSUtil's Test Case.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com
+ * 
+ * @version $Revision: $, $Date: $
+ */
+public final class PEPSUtilTestCase {
+  
+  /**
+   * Message example.
+   */
+  private static final String MESSAGE_SAMPLE = "003002 - Authentication Failed";
+  
+  /**
+   * Error message example.
+   */
+  private static final String ERROR_MESSAGE_SAMPLE = "Authentication Failed";
+  
+  /**
+   * Error code example.
+   */
+  private static final String ERROR_CODE_SAMPLE = "003002";
+  
+  /**
+   * Properties values for testing proposes.
+   */
+  private static final Properties CONFIGS1 = new Properties();
+  
+  /**
+   * Properties values for testing proposes.
+   */
+  private static final Properties CONFIGS2 = new Properties();
+  
+  /**
+   * The empty string value: "".
+   */
+  private static final String EMPTY_STRING = "";
+  
+  /**
+   * The empty byte value: [].
+   */
+  private static final byte[] EMPTY_BYTE = new byte[] {};
+  
+  /**
+   * The empty byte hash value.
+   */
+  private static final byte[] EMPTY_HASH_BYTE = new byte[] { -49, -125, -31,
+    53, 126, -17, -72, -67, -15, 84, 40, 80, -42, 109, -128, 7, -42, 32, -28,
+    5, 11, 87, 21, -36, -125, -12, -87, 33, -45, 108, -23, -50, 71, -48, -47,
+    60, 93, -123, -14, -80, -1, -125, 24, -46, -121, 126, -20, 47, 99, -71, 49,
+    -67, 71, 65, 122, -127, -91, 56, 50, 122, -7, 39, -38, 62 };
+  
+  /**
+   * The SAML example byte[] value.
+   */
+  private static final byte[] SAML_BYTE_SAMPLE = new byte[] { 60, 115, 97, 109,
+    108, 62, 46, 46, 46, 60, 47, 115, 97, 109, 108 };
+  
+  /**
+   * The SAML's Base64 example value.
+   */
+  private static final String SAML_BASE64_SAMPLE = "PHNhbWw+Li4uPC9zYW1s";
+  
+  /**
+   * The SAML's Base64 byte[] example value.
+   */
+  private static byte[] SAML_BASE64_BYTE_SAMPLE = new byte[] { 80, 72, 78, 104,
+    98, 87, 119, 43, 76, 105, 52, 117, 80, 67, 57, 122, 89, 87, 49, 115 };
+  
+  /**
+   * The SAML's Base64 Hash byte[] example value.
+   */
+  private static byte[] HASH_BYTE_SAMPLE = new byte[] { 67, 38, 11, 115, 49,
+    -5, 54, -85, 38, 43, -99, 96, 71, -41, 50, -96, 71, -86, 90, -97, 66, -67,
+    90, 101, 30, 82, -13, 60, -106, -72, -103, -75, 19, 2, -107, 107, -6, -56,
+    34, -111, -44, -57, -26, -5, 33, 78, -1, 30, 21, 74, -26, 118, -46, -12,
+    -102, 12, -56, 30, -59, -104, -21, -42, -103, 82 };
+  
+  /**
+   * Init PEPSUtilTestCase class.
+   */
+  @BeforeClass
+  public static void runsBeforeTheTestSuite() {
+    
+    CONFIGS1.setProperty("max.attrList.size", "20000");
+    CONFIGS1.setProperty("attrList.code", "202005");
+    CONFIGS1.setProperty("attrList.message", "invalid.attrList.parameter");
+    
+    CONFIGS1.setProperty("max.qaaLevel.size", "1");
+    CONFIGS1.setProperty("max.spUrl.size", "inv");
+    CONFIGS1.setProperty("validation.active", "true");
+    CONFIGS1.setProperty("hashDigest.className",
+      "org.bouncycastle.crypto.digests.SHA512Digest");
+    CONFIGS1.setProperty("invalidAgeDateValue.code", "35");
+    CONFIGS1.setProperty("invalidAttributeValue.code", "34");
+    CONFIGS1.setProperty("invalidAttributeValue.message",
+      "Unexpected or invalid content was encountered within a "
+        + "<saml:Attribute> or <saml:AttributeValue> element.");
+  }
+   
+  /**
+   * Tests the {@link PEPSUtil#createInstance(Properties)} method for the given
+   * properties object.
+   */
+  @Test
+  public void testCreateInstance() {
+    Assert.assertNotNull(PEPSUtil.createInstance(CONFIGS2));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getConfigs()}.
+   */
+  @Test
+  public void testGetConfigs() {
+    final PEPSUtil pepsUtils = PEPSUtil.createInstance(CONFIGS1);
+    assertEquals(pepsUtils.getConfigs(), CONFIGS1);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getConfigs()}.
+   */
+  @Test
+  public void testGetConfigsDifferent() {
+    final PEPSUtil pepsUtils = PEPSUtil.createInstance(CONFIGS1);
+    assertNotSame(pepsUtils.getConfigs(), CONFIGS2);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getConfig(String)} method for the given existing
+   * config.
+   */
+  @Test
+  public void testGetConfigExists() {
+    assertEquals(PEPSUtil.getConfig("hashDigest.className"),
+      "org.bouncycastle.crypto.digests.SHA512Digest");
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getConfig(String)} method for the given not
+   * existing config.
+   */
+  @Test
+  public void testGetConfigNoExists() {
+    assertNull(PEPSUtil.getConfig("doesnt.exists"));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getConfig(String)} method for the given null
+   * value.
+   */
+  @Test(expected = NullPointerException.class)
+  public void testGetConfigNull() {
+    assertNull(PEPSUtil.getConfig(null));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#isValidParameter(String, String)} method for the
+   * given param values.
+   */
+  @Test
+  public void testIsValidParameterExists() {
+    assertTrue(PEPSUtil.isValidParameter("qaaLevel", "1"));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#isValidParameter(String, String)} method for the
+   * given param values.
+   */
+  @Test
+  public void testIsValidParameterExistsGreat() {
+    assertFalse(PEPSUtil.isValidParameter("qaaLevel", "12"));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#isValidParameter(String, String)} method for the
+   * given param values.
+   */
+  @Test
+  public void testIsValidParameterExistsIvalidConf() {
+    assertFalse(PEPSUtil
+      .isValidParameter("spUrl", "http://localhost:8080/SP/"));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#isValidParameter(String, String)} method for the
+   * given param values.
+   */
+  @Test
+  public void testIsValidParameterNotExists() {
+    assertFalse(PEPSUtil.isValidParameter("doesntexists",
+      "http://localhost:8080/SP/"));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#isValidParameter(String, String)} method for the
+   * given param values.
+   */
+  @Test
+  public void testIsValidParameterNullParamName() {
+    assertFalse(PEPSUtil.isValidParameter(null, "http://localhost:8080/SP/"));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#isValidParameter(String, String)} method for the
+   * given param values.
+   */
+  @Test
+  public void testIsValidParameterNullParamValue() {
+    assertFalse(PEPSUtil.isValidParameter("spUrl", null));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#validateParameter(String, String, Object)} method
+   * for the given object values.
+   */
+  @Test
+  public void testValidateParameterValid() {
+    final IPersonalAttributeList persAttrList = new PersonalAttributeList();
+    persAttrList.populate("isAgeOver:true:[15,]:Available;");
+    PEPSUtil.validateParameter("ServiceProviderAction",
+      PEPSParameters.ATTRIBUTE_LIST.toString(), persAttrList);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#validateParameter(String, String, Object)} method
+   * for the given string values.
+   */
+  @Test(expected = InvalidParameterPEPSException.class)
+  public void testValidateParameterNull() {
+    PEPSUtil.validateParameter("ServiceProviderAction",
+      PEPSParameters.ATTRIBUTE_LIST.toString(), null);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#validateParameter(String, String, String)} method
+   * for the given string values.
+   * 
+   * The tested class just invokes
+   * {@link PEPSUtil#validateParameter(String, String, String, String, String)}
+   * so further tests will be later.
+   */
+  @Test
+  public void testValidateParameter() {
+    PEPSUtil.validateParameter("ServiceProviderAction",
+      PEPSParameters.ATTRIBUTE_LIST.toString(),
+      "isAgeOver:true:[15,]:Available;");
+  }
+  
+  /**
+   * Tests the
+   * {@link PEPSUtil#validateParameter(String, String, String, PEPSErrors)}
+   * method for the given string value and {@link PEPSErrors} enum.
+   * 
+   * The tested class just invokes
+   * {@link PEPSUtil#validateParameter(String, String, String, String, String)}
+   * so further tests will be later.
+   */
+  @Test
+  public void testValidateParameterPEPSErrors() {
+    PEPSUtil.validateParameter("CountrySelectorAction",
+      PEPSParameters.ATTRIBUTE_LIST.toString(),
+      "isAgeOver:true:[15,]:Available;",
+      PEPSErrors.SP_COUNTRY_SELECTOR_INVALID_ATTR);
+  }
+  
+  /**
+   * Tests the
+   * {@link PEPSUtil#validateParameter(String, String, String, String, String)}
+   * method for the given string values.
+   */
+  @Test
+  public void testValidateParameterValidParams() {
+    PEPSUtil.validateParameter("ServiceProviderAction", "qaaLevel", "1",
+      "qaaLevel.code", "qaaLevel.message");
+  }
+  
+  /**
+   * Tests the
+   * {@link PEPSUtil#validateParameter(String, String, String, String, String)}
+   * method for the given string values.
+   */
+  @Test(expected = InvalidParameterPEPSException.class)
+  public void testValidateParameterInvalidParamValue() {
+    PEPSUtil.validateParameter("ServiceProviderAction", "qaaLevel", "10",
+      "qaaLevel.code", "qaaLevel.message");
+  }
+  
+  /**
+   * Tests the
+   * {@link PEPSUtil#validateParameter(String, String, String, String, String)}
+   * method for the given string values.
+   */
+  @Test(expected = InvalidParameterPEPSException.class)
+  public void testValidateParameterInvalidParamName() {
+    PEPSUtil.validateParameter("ServiceProviderAction", "doesnt.exists", "1",
+      "qaaLevel.code", "qaaLevel.message");
+  }
+  
+  /**
+   * Tests the
+   * {@link PEPSUtil#validateParameter(String, String, String, String, String)}
+   * method for the given string values.
+   */
+  @Test(expected = InvalidParameterPEPSException.class)
+  public void testValidateParameterNullParamName() {
+    PEPSUtil.validateParameter("ServiceProviderAction", null, "1",
+      "qaaLevel.code", "qaaLevel.message");
+  }
+  
+  /**
+   * Tests the
+   * {@link PEPSUtil#validateParameter(String, String, String, String, String)}
+   * method for the given string values.
+   */
+  @Test(expected = InvalidParameterPEPSException.class)
+  public void testValidateParameterNullParamValue() {
+    PEPSUtil.validateParameter("ServiceProviderAction", "qaaLevel", null,
+      "qaaLevel.code", "qaaLevel.message");
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#encodeSAMLToken(byte[])} method for the given
+   * string value.
+   */
+  @Test
+  public void testEncodeSAMLToken() {
+    assertEquals(PEPSUtil.encodeSAMLToken(SAML_BYTE_SAMPLE), SAML_BASE64_SAMPLE);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#encodeSAMLToken(byte[])} method for the given
+   * null.
+   */
+  @Test(expected = NullPointerException.class)
+  public void testEncodeSAMLTokenNull() {
+    assertNotSame(PEPSUtil.encodeSAMLToken(null), SAML_BASE64_SAMPLE);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#encodeSAMLToken(byte[])} method for the given
+   * empty byte[] value.
+   */
+  @Test
+  public void testEncodeSAMLTokenEmpty() {
+    assertEquals(PEPSUtil.encodeSAMLToken(EMPTY_BYTE), EMPTY_STRING);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#decodeSAMLToken(byte[])} method for the given
+   * byte[] value.
+   */
+  @Test
+  public void testDecodeSAMLToken() {
+    assertArrayEquals(PEPSUtil.decodeSAMLToken(SAML_BASE64_SAMPLE),
+      SAML_BYTE_SAMPLE);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#decodeSAMLToken(byte[])} method for the given
+   * null value.
+   */
+  @Test(expected = NullPointerException.class)
+  public void testDecodeSAMLTokenNull() {
+    assertNotSame(PEPSUtil.decodeSAMLToken(null), SAML_BYTE_SAMPLE);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#decodeSAMLToken(byte[])} method for the given
+   * empty string value.
+   */
+  @Test(expected = StringIndexOutOfBoundsException.class)
+  public void testDecodeSAMLTokenEmpty() {
+    assertTrue(PEPSUtil.decodeSAMLToken(EMPTY_STRING) == EMPTY_BYTE);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#hashPersonalToken(byte[])} method for the given
+   * byte[] value.
+   */
+  @Test
+  public void testHashPersonalToken() {
+    assertArrayEquals(PEPSUtil.hashPersonalToken(SAML_BASE64_BYTE_SAMPLE),
+      HASH_BYTE_SAMPLE);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#hashPersonalToken(byte[])} method for the given
+   * null value.
+   */
+  @Test(expected = InternalErrorPEPSException.class)
+  public void testHashPersonalTokenNull() {
+    assertNull(PEPSUtil.hashPersonalToken(null));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#hashPersonalToken(byte[])} method for the given
+   * empty value.
+   */
+  @Test
+  public void testHashPersonalTokenEmpty() {
+    assertArrayEquals(PEPSUtil.hashPersonalToken(EMPTY_BYTE), EMPTY_HASH_BYTE);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorCode(String)} method for the given
+   * correct message.
+   */
+  @Test
+  public void testGetStorkErrorCodeExists() {
+    assertEquals(PEPSUtil.getStorkErrorCode(MESSAGE_SAMPLE), ERROR_CODE_SAMPLE);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorCode(String)} method for the given
+   * invalid message.
+   */
+  @Test
+  public void testGetStorkErrorCodeNoExists() {
+    assertNull(PEPSUtil.getStorkErrorCode(ERROR_MESSAGE_SAMPLE));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorCode(String)} method for the given
+   * empty message.
+   */
+  @Test
+  public void testGetStorkErrorCodeEmpty() {
+    assertNull(PEPSUtil.getStorkErrorCode(EMPTY_STRING));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorCode(String)} method for the given
+   * null message.
+   */
+  @Test
+  public void testGetStorkErrorCodeNull() {
+    assertNull(PEPSUtil.getStorkErrorCode(null));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorCode(String)} method for the given
+   * invalid message.
+   */
+  @Test
+  public void testGetStorkErrorCodeWithSepFake() {
+    assertNull(PEPSUtil.getStorkErrorCode("-"));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorCode(String)} method for the given
+   * invalid message.
+   */
+  @Test
+  public void testGetStorkErrorCodeWithSepAndCodeFake() {
+    assertNull(PEPSUtil.getStorkErrorCode("000001 -"));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorMessage(String)} method for the
+   * given correct message.
+   */
+  @Test
+  public void testGetStorkErrorMessageExists() {
+    assertEquals(PEPSUtil.getStorkErrorMessage(MESSAGE_SAMPLE),
+      ERROR_MESSAGE_SAMPLE);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorMessage(String)} method for the
+   * given invalid message.
+   */
+  @Test
+  public void testGetStorkErrorMessageNoExists() {
+    assertEquals(PEPSUtil.getStorkErrorMessage(ERROR_MESSAGE_SAMPLE),
+      ERROR_MESSAGE_SAMPLE);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorMessage(String)} method for the
+   * given empty message.
+   */
+  @Test
+  public void testGetStorkErrorMessageEmpty() {
+    assertEquals(PEPSUtil.getStorkErrorMessage(EMPTY_STRING),
+      EMPTY_STRING);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorMessage(String)} method for the
+   * given null message.
+   */
+  @Test
+  public void testGetStorkErrorMessageNull() {
+    assertNull(PEPSUtil.getStorkErrorMessage(null));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorMessage(String)} method for the
+   * given invalid message.
+   */
+  @Test
+  public void testGetStorkErrorMessageWithSepFake() {
+    assertEquals(PEPSUtil.getStorkErrorMessage("-"),"-");
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorMessage(String)} method for the
+   * given invalid message.
+   */
+  @Test
+  public void testGetStorkErrorMessageWithSepAndCodeFake() {
+    assertEquals(PEPSUtil.getStorkErrorMessage("000001 -"),"000001 -");
+  }
+  
+}
diff --git a/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/PersonalAttributeListTestCase.java.svn-base b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/PersonalAttributeListTestCase.java.svn-base
new file mode 100644
index 000000000..7052b320a
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/PersonalAttributeListTestCase.java.svn-base
@@ -0,0 +1,747 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * 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 eu.stork.peps.tests;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import eu.stork.peps.auth.commons.PersonalAttribute;
+import eu.stork.peps.auth.commons.PersonalAttributeList;
+import eu.stork.peps.auth.commons.STORKStatusCode;
+
+/**
+ * The PersonalAttributeList's Test Case.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.5 $, $Date: 2010-11-17 05:17:02 $
+ */
+public final class PersonalAttributeListTestCase {
+  
+  /**
+   * isAgeOver constant value.
+   */
+  private static final String ISAGEOVER_CONS = "isAgeOver";
+  
+  /**
+   * 1 constant value.
+   */
+  private static final int ONE_CONS = 1;
+  
+  /**
+   * 2 constant value.
+   */
+  private static final int TWO_CONS = 2;
+  
+  /**
+   * An empty attribute.
+   */
+  @SuppressWarnings("unused")
+  private static final PersonalAttributeList EMPTY_ATTR_LIST =
+    new PersonalAttributeList(0);
+  
+  /**
+   * An attribute with a complex value (canonicalResidenceAddress).
+   */
+  private static PersonalAttribute complexAttrValue = null;
+  
+  /**
+   * Simple attribute value list string.
+   */
+  private static final String SIMPLE_ATTRLIST =
+    "isAgeOver:true:[15,]:Available;";
+  
+  /**
+   * Simple attribute value list string.
+   */
+  private static final String SIMPLE_ATTRLIST2 =
+    "isAgeOver:true:[18,]:Available;";
+  
+  /**
+   * Simple attribute value list string.
+   */
+  private static final String SIMPLE_ATTRLIST3 = 
+    "isAgeOver:true:[15,]:Available;isAgeOver:true:[18,]:Available;";
+  
+  /**
+   * Simple attribute value list string.
+   */
+  private static final String SIMPLE_ATTRLIST3_REVERSE = 
+    "isAgeOver:true:[18,]:Available;isAgeOver:true:[15,]:Available;";
+  /**
+   * Simple attribute value list string.
+   */
+  private static final String COMPLEX_ATTRLIST =
+    "canonicalResidenceAddress:true:[postalCode=4100,apartmentNumber=Ed. B,"
+    + "state=Porto,countryCodeAddress=PT,streetNumber=379,"
+    + "streetName=Avenida Sidonio Pais,town=Porto,]:Available;";
+  /**
+   * Mix attribute list string.
+   */
+  private static final String STR_MIX_ATTR_LIST =
+    "isAgeOver:true:[15,]:Available;canonicalResidenceAddress:true:["
+    + "postalCode=4100,apartmentNumber=Ed.B,state=Porto,countryCodeAddress=PT,"
+    + "streetNumber=379,streetName=Avenida Sidonio Pais,town=Porto,]:"
+    + "Available;";
+  
+  /**
+   * Mix attribute list 2 string.
+   */
+  private static final String STR_MIX_ATTR_LIST2 =
+    "isAgeOver:true:[15,]:Available;canonicalResidenceAddress:true:["
+    + "postalCode=4100,apartmentNumber=Ed.B,state=Porto,countryCodeAddress=PT,"
+    + "streetNumber=379,streetName=Avenida Sidonio Pais,town=Porto,]:Available;"
+    + "mandateContent:true:["
+    + "isJoint=\"isjoint\",typeOfPower=\"power\",ValidTo=\"validto\",validfrom=\"validfrom\",AQAA=\"3\",isChained=\"ischained\",]:"
+    + "Available;";
+  
+  /**
+   * Attribute List example.
+   */
+  @SuppressWarnings({ "serial" })
+  private static final PersonalAttribute ATTR_VALUE = new PersonalAttribute(
+    "age", true, new ArrayList<String>() {
+      {
+        add("15");
+      }
+    }, STORKStatusCode.STATUS_AVAILABLE.toString());
+  
+  /**
+   * Init PersonalAttributeListTestCase class.
+   */
+  @SuppressWarnings("serial")
+  @BeforeClass
+  public static void runsBeforeTheTestSuite() {
+    final Map<String, String> values = new HashMap<String, String>() {
+      {
+        put("countryCodeAddress", "PT");
+        put("state", "Porto");
+        put("town", "Porto");
+        put("postalCode", "4100");
+        put("streetName", "Avenida Sidonio Pais");
+        put("streetNumber", "379");
+        put("apartmentNumber", "Ed. B");
+      }
+    };
+    
+    complexAttrValue =
+      new PersonalAttribute("canonicalResidenceAddress", true, values,
+        STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+  }
+  
+  /**
+   * Testing Personal Attribute List add method. Personal Attribute list must be
+   * size 1 - Simple attribute.
+   */
+  @Test
+  public void testAddSimpleAttr() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.add(ATTR_VALUE);
+    Assert.assertTrue(attrList.size() == 1);
+  }
+  
+  /**
+   * Testing Personal Attribute List add method. Personal Attribute list must be
+   * size 1 - Complex attribute.
+   */
+  @Test
+  public void testAddCompleAttr() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.add(complexAttrValue);
+    Assert.assertTrue(attrList.size() == 1);
+  }
+  
+  /**
+   * Testing Personal Attribute List add method. Personal Attribute list must be
+   * size 0 - no attribute.
+   */
+  @Test
+  public void testAddNull() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.add(null);
+    Assert.assertTrue(attrList.size() == 0);
+  }
+  
+  /**
+   * Testing Personal Attribute List add method. Same attribute name added
+   * twice. Personal Attribute list must be size 2 - IsAgeOver attribute added
+   * twice.
+   */
+  @SuppressWarnings("serial")
+  @Test
+  public void testAddSameAttrName() {
+    final PersonalAttribute attrValueUnder =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("15");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+    final PersonalAttribute attrValueOver =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("18");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.add(attrValueUnder);
+    attrList.add(attrValueOver);
+    Assert.assertTrue(attrList.size() == 2);
+  }
+  
+  /**
+   * Testing Personal Attribute List add method. Same attribute name added
+   * twice. Personal Attribute list must be size 2 - IsAgeOver attribute added
+   * twice.
+   */
+  @SuppressWarnings("serial")
+  @Test
+  public void testAddSameAttrNameEmpty() {
+    final PersonalAttribute attrValueUnder =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("15");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+    final PersonalAttribute attrValueOver =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.add(attrValueUnder);
+    attrList.add(attrValueOver);
+    Assert.assertTrue(attrList.size() == 2);
+  }
+  
+  /**
+   * Testing Personal Attribute List put method. Personal Attribute list must be
+   * size 1 - Simple Value.
+   */
+  @Test
+  public void testPutSimpleAttr() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.put(ATTR_VALUE.getName(), ATTR_VALUE);
+    Assert.assertTrue(attrList.size() == 1);
+  }
+  
+  /**
+   * Testing Personal Attribute List put method. Personal Attribute list must be
+   * size 1 - Complex Value.
+   */
+  @Test
+  public void testPutComplexAttr() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.put(ATTR_VALUE.getName(), complexAttrValue);
+    Assert.assertTrue(attrList.size() == 1);
+  }
+  
+  /**
+   * Testing Personal Attribute List put method. Personal Attribute list must be
+   * size 0 - no attribute.
+   */
+  @Test
+  public void testPutNull() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.put("", null);
+    Assert.assertTrue(attrList.size() == 0);
+  }
+  
+  /**
+   * Testing Personal Attribute List put method. Personal Attribute list must be
+   * size 2 - IsAgeOver attribute added twice.
+   */
+  @SuppressWarnings("serial")
+  @Test
+  public void testPutSameAttrName() {
+    final PersonalAttribute attrValueUnder =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("15");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+    final PersonalAttribute attrValueOver =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("18");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.put(attrValueUnder.getName(), attrValueUnder);
+    attrList.put(attrValueOver.getName(), attrValueOver);
+    Assert.assertTrue(attrList.size() == 2);
+  }
+  
+  /**
+   * Testing Personal Attribute List put method. Personal Attribute list must be
+   * size 2 - IsAgeOver attribute added twice.
+   */
+  @SuppressWarnings("serial")
+  @Test
+  public void testPutSameAttrNameEmpty() {
+    final PersonalAttribute attrValueUnder =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("15");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+    final PersonalAttribute attrValueOver =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.put(attrValueUnder.getName(), attrValueUnder);
+    attrList.put(attrValueOver.getName(), attrValueOver);
+    Assert.assertTrue(attrList.size() == 2);
+  }
+  
+  /**
+   * Testing Personal Attribute List get method. Personal Attribute list must be
+   * size 1 - Simple attribute.
+   */
+  @Test
+  public void testGetSimpleAttr() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.add(ATTR_VALUE);
+    Assert.assertEquals(ATTR_VALUE, attrList.get(ATTR_VALUE.getName()));
+  }
+  
+  /**
+   * Testing Personal Attribute List add method. Personal Attribute list must be
+   * size 1 - Complex attribute.
+   */
+  @Test
+  public void testGetCompleAttr() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.add(complexAttrValue);
+    Assert.assertEquals(complexAttrValue.toString(),
+      attrList.get(complexAttrValue.getName()).toString());
+  }
+  
+  /**
+   * Testing Personal Attribute List get method. Personal Attribute list must be
+   * size 2 - IsAgeOver attribute.
+   */
+  @SuppressWarnings("serial")
+  @Test
+  public void testGetIsAgeOverAttr() {
+    final PersonalAttribute attrValueUnder =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("15");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+    final PersonalAttribute attrValueOver =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("18");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.add(attrValueUnder);
+    attrList.add(attrValueOver);
+    Assert.assertEquals(SIMPLE_ATTRLIST,
+      attrList.get(attrValueUnder.getName()).toString());
+    Assert.assertEquals(SIMPLE_ATTRLIST2,
+      attrList.get(attrValueOver.getName()).toString());
+  }
+  
+  /**
+   * Testing Personal Attribute List populate method. Personal Attribute list
+   * must be size 1 - Simple attribute.
+   */
+  @Test
+  public void testPopulateSimpleAttr() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.populate(SIMPLE_ATTRLIST);
+    Assert.assertTrue(attrList.size() == 1);
+  }
+  
+  /**
+   * Testing Personal Attribute List populate method. Personal Attribute list
+   * must be size 1 - Complex attribute.
+   */
+  @Test
+  public void testPopulateComplexAttr() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.populate(COMPLEX_ATTRLIST);
+    Assert.assertTrue(attrList.size() == 1);
+  }
+  
+  /**
+   * Testing Personal Attribute List populate method. Personal Attribute list
+   * must be size 1 - Simple and Complex attribute.
+   */
+  @Test
+  public void testPopulateMixAttrs() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.populate(STR_MIX_ATTR_LIST);
+    Assert.assertTrue(attrList.size() == 2);
+  }
+  
+  /**
+   * Testing Personal Attribute List toString method using add.
+   */
+  @SuppressWarnings("serial")
+  @Test
+  public void testToStringFromAdd() {
+    final PersonalAttribute attrValueUnder =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("15");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+    final PersonalAttribute attrValueOver =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("18");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.add(attrValueUnder);
+    attrList.add(attrValueOver);
+    Assert.assertEquals(SIMPLE_ATTRLIST3_REVERSE, attrList.toString());
+  }
+  
+  /**
+   * Testing Personal Attribute List toString method using put.
+   * 
+   */
+  @SuppressWarnings("serial")
+  @Test
+  public void testToStringFromPut() {
+    final PersonalAttribute attrValueUnder =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("15");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+    final PersonalAttribute attrValueOver =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("18");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.put(attrValueUnder.getName(), attrValueUnder);
+    attrList.put(attrValueOver.getName(), attrValueOver);
+    Assert.assertEquals(SIMPLE_ATTRLIST3_REVERSE, attrList.toString());
+  }
+  
+  /**
+   * Testing Personal Attribute List toString method using populate.
+   */
+  @Test
+  public void testToStringFromSimplePopulate() {
+    final String strAttrList = "isAgeOver:true";
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.populate(strAttrList);
+    Assert.assertEquals("isAgeOver:true:[]:;", attrList.toString());
+  }
+  
+  /**
+   * Testing Personal Attribute List toString method using populate.
+   */
+  @Test
+  public void testToStringFromPopulate() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.populate(SIMPLE_ATTRLIST3);
+    Assert.assertEquals(SIMPLE_ATTRLIST3_REVERSE, attrList.toString());
+  }
+  
+  /**
+   * Testing Personal Attribute List populate method, with invalid values.
+   */
+  @Test
+  public void testPopulateWithInvalidValuesFormat() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate("name:type:values:status;");
+    Assert.assertEquals(pal, new PersonalAttributeList());
+  }
+  
+  /**
+   * Testing Personal Attribute List populate method, with invalid format.
+   */
+  @Test
+  public void testPopulateWithInvalidFormat() {
+    
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate("name:type::status;");
+    Assert.assertEquals(pal, new PersonalAttributeList());
+  }
+  
+  /**
+   * Testing Personal Attribute List clone method using add.
+   */
+  @SuppressWarnings("serial")
+  @Test
+  public void testCloneFromAdd() {
+    final PersonalAttribute attrValueUnder =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("15");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+    final PersonalAttribute attrValueOver =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("18");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.add(attrValueUnder);
+    attrList.add(attrValueOver);
+    Assert.assertNotSame(attrList, attrList.clone());
+  }
+  
+  /**
+   * Testing Personal Attribute List clone method using put.
+   */
+  @SuppressWarnings("serial")
+  @Test
+  public void testCloneFromPut() {
+    final PersonalAttribute attrValueUnder =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("15");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+    final PersonalAttribute attrValueOver =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("18");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.put(attrValueUnder.getName(), attrValueUnder);
+    attrList.put(attrValueOver.getName(), attrValueOver);
+    Assert.assertNotSame(attrList, attrList.clone());
+  }
+  
+  /**
+   * Testing Personal Attribute List clone method using populate.
+   */
+  @Test
+  public void testCloneFromPopulate() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(SIMPLE_ATTRLIST3);
+    Assert.assertNotSame(pal, pal.clone());
+  }
+  
+  /**
+   * Testing Personal Attribute List iterator.
+   */
+  @Test
+  public void testIterator() {
+    final String strAttrList =
+      "isAgeOver:true:[15,]:Available;isAgeOver:true:[18,]:Available;";
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(strAttrList);
+    final Iterator<PersonalAttribute> itAttr = pal.iterator();
+    while (itAttr.hasNext()) {
+      final PersonalAttribute attr = itAttr.next();
+      Assert.assertEquals(ISAGEOVER_CONS, attr.getName());
+    }
+  }
+  
+  /**
+   * Testing Personal Attribute List's GetOptionalAttributes method with empty attribute list.
+   */
+  @Test
+  public void testGetOptionalAttributesWithEmptyList() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    Assert.assertTrue(pal.getOptionalAttributes().isEmpty());
+  }
+  
+  /**
+   * Testing Personal Attribute List's GetOptionalAttributes method without optional attributes.
+   */
+  @Test
+  public void testGetOptionalAttributesWithoutOptional() {
+    final String strAttrList =
+      "isAgeOver:true:[15,]:Available;isAgeOver:true:[18,]:Available;";
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(strAttrList);
+    Assert.assertTrue(pal.getOptionalAttributes().isEmpty());
+  }
+  
+  /**
+   * Testing Personal Attribute List's GetOptionalAttributes method with one optional attribute.
+   */
+  @Test
+  public void testGetOptionalAttributesWithOneOptional() {
+    final String strAttrList =
+      "age:false:[]:;isAgeOver:true:[15,]:;isAgeOver:true:[18,]:;";
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(strAttrList);
+    Assert.assertTrue(pal.getOptionalAttributes().size() == ONE_CONS);
+  }
+  
+  /**
+   * Testing Personal Attribute List's GetOptionalAttributes method with two optional attribute.
+   */
+  @Test
+  public void testGetOptionalAttributesWithOnlyOptional() {
+    final String strAttrList =
+      "age:false:[]:;isAgeOver:false:[18,]:;";
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(strAttrList);
+    Assert.assertTrue(pal.getOptionalAttributes().size() == TWO_CONS);
+  }
+  
+  /**
+   * Testing Personal Attribute List's getMandatoryAttributes method with empty attribute list.
+   */
+  @Test
+  public void testGetMandatoryAttributesWithEmptyList() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    Assert.assertTrue(pal.getMandatoryAttributes().isEmpty());
+  }
+  
+  /**
+   * Testing Personal Attribute List's getMandatoryAttributes method without mandatory attributes.
+   */
+  @Test
+  public void testGetMandatoryAttributesWithoutMandatory() {
+    final String strAttrList =
+      "isAgeOver:false:[15,]:Available;isAgeOver:false:[18,]:Available;";
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(strAttrList);
+    Assert.assertTrue(pal.getMandatoryAttributes().isEmpty());
+  }
+  
+  /**
+   * Testing Personal Attribute List's GetMandatoryAttributes method with one mandatory attribute.
+   */
+  @Test
+  public void testGetMandatoryAttributesWithOneMandatory() {
+    final String strAttrList =
+      "age:true:[]:;isAgeOver:false:[15,]:;isAgeOver:false:[18,]:;";
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(strAttrList);
+    Assert.assertTrue(pal.getMandatoryAttributes().size() == ONE_CONS);
+  }
+  
+  /**
+   * Testing Personal Attribute List's GetMandatoryAttributes method with two mandatory attribute.
+   */
+  @Test
+  public void testGetMandatoryAttributesWithOnlyMandatory() {
+    final String strAttrList =
+      "age:true:[]:;isAgeOver:true:[18,]:;";
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(strAttrList);
+    Assert.assertTrue(pal.getMandatoryAttributes().size() == TWO_CONS);
+  }
+  
+  /**
+   * Testing Personal Attribute List's getSimpleValueAttributes method with empty attribute list.
+   */
+  @Test
+  public void testGetSimpleValueAttributesWithEmptyList() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    Assert.assertTrue(pal.getSimpleValueAttributes().isEmpty());
+  }
+  
+  /**
+   * Testing Personal Attribute List's getSimpleValueAttributes() method without simple attributes.
+   */
+  @Test
+  public void testGetSimpleValueAttributesWithoutSimple() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(COMPLEX_ATTRLIST);
+    Assert.assertTrue(pal.getSimpleValueAttributes().isEmpty());
+  }
+  
+  /**
+   * Testing Personal Attribute List's getSimpleValueAttributes() method with one simple attribute.
+   */
+  @Test
+  public void testGetSimpleValueAttributesWithOneSimple() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(STR_MIX_ATTR_LIST);
+    Assert.assertTrue(pal.getSimpleValueAttributes().size() == ONE_CONS);
+  }
+  
+  /**
+   * Testing Personal Attribute List's GetMandatoryAttributes method with two simple attribute.
+   */
+  @Test
+  public void testGetSimpleValueAttributesWithOnlySimple() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(SIMPLE_ATTRLIST3);
+    Assert.assertTrue(pal.getSimpleValueAttributes().size() == TWO_CONS);
+  }
+  
+  /**
+   * Testing Personal Attribute List's getComplexValueAttributes method with empty attribute list.
+   */
+  @Test
+  public void testGetComplexAttributesWithEmptyList() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    Assert.assertTrue(pal.getComplexAttributes().isEmpty());
+  }
+  
+  /**
+   * Testing Personal Attribute List's getComplexAttributes() method without complex attributes.
+   */
+  @Test
+  public void testGetComplexAttributesWithoutSimple() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(SIMPLE_ATTRLIST2);
+    Assert.assertTrue(pal.getComplexAttributes().isEmpty());
+  }
+  
+  /**
+   * Testing Personal Attribute List's getComplexAttributes() method with one complex attribute.
+   */
+  @Test
+  public void testGetComplexAttributesWithOneComplex() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(STR_MIX_ATTR_LIST);
+    Assert.assertTrue(pal.getComplexAttributes().size() == ONE_CONS);
+  }
+  
+  /**
+   * Testing Personal Attribute List's GetMandatoryAttributes method with only two Complex attribute.
+   */
+  @Test
+  public void testGetComplexAttributesWithOnlyComplex() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(STR_MIX_ATTR_LIST2);
+    Assert.assertTrue(pal.getComplexAttributes().size() == TWO_CONS);
+  }
+
+}
diff --git a/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/PersonalAttributeTestCase.java.svn-base b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/PersonalAttributeTestCase.java.svn-base
new file mode 100644
index 000000000..458d510e0
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/PersonalAttributeTestCase.java.svn-base
@@ -0,0 +1,182 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * 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 eu.stork.peps.tests;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+
+import junit.framework.Assert;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import eu.stork.peps.auth.commons.PersonalAttribute;
+import eu.stork.peps.auth.commons.STORKStatusCode;
+
+/**
+ * The PersonalAttribute's Test Case.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.4 $, $Date: 2010-11-17 05:17:03 $
+ */
+public final class PersonalAttributeTestCase {
+  
+  /**
+   * An empty attribute.
+   */
+  private static final PersonalAttribute EMPTYATTR = new PersonalAttribute();
+  
+  /**
+   * An attribute with a complex value (canonicalResidenceAddress).
+   */
+  private static PersonalAttribute complexAttrValue = null;
+  
+  /**
+   * An attribute with a simple value (age).
+   */
+  @SuppressWarnings("serial")
+  private static final PersonalAttribute ATTR_VALUE = new PersonalAttribute(
+    "age", true, new ArrayList<String>() {
+      {
+        add("15");
+      }
+    }, STORKStatusCode.STATUS_AVAILABLE.toString());
+  
+  /**
+   * Init PersonalAttributeTestCase class.
+   */
+  @SuppressWarnings("serial")
+  @BeforeClass
+  public static void runsBeforeTheTestSuite() {
+    final Map<String, String> values = new HashMap<String, String>() {
+      {
+        put("countryCodeAddress", "PT");
+        put("state", "Porto");
+        put("town", "Porto");
+        put("postalCode", "4100");
+        put("streetName", "Avenida Sidonio Pais");
+        put("streetNumber", "379");
+        put("apartmentNumber", "B");
+      }
+    };
+    
+    complexAttrValue =
+      new PersonalAttribute("canonicalResidenceAddress", true, values,
+        STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+  }
+  
+  /**
+   * Tests the {@link PersonalAttribute#toString()} method for the given simple
+   * attribute value. Values must match.
+   */
+  @Test
+  public void testToStringValues() {
+    Assert.assertEquals("age:true:[15,]:Available;", ATTR_VALUE.toString());
+  }
+  
+  /**
+   * Tests the {@link PersonalAttribute#toString()} method for the given complex
+   * attribute value. Values must match.
+   */
+  @Test
+  public void testToStringComplexValues() {
+    Assert.assertEquals(
+      "canonicalResidenceAddress:true:[postalCode=4100,apartmentNumber=B,"
+        + "state=Porto,countryCodeAddress=PT,streetNumber=379,"
+        + "streetName=Avenida Sidonio Pais,town=Porto,]:Available;",
+      complexAttrValue.toString());
+  }
+  
+  /**
+   * Tests the {@link PersonalAttribute#isEmptyStatus()} method for the given
+   * empty attribute. Must return true.
+   */
+  @Test
+  public void testToIsEmptyStatusWithNull() {
+    Assert.assertTrue(EMPTYATTR.isEmptyStatus());
+  }
+  
+  /**
+   * Tests the {@link PersonalAttribute#isEmptyStatus()} method for the given
+   * new attribute. Must return true.
+   */
+  @Test
+  public void testToIsEmptyStatusWithEmptyString() {
+    final PersonalAttribute attr = (PersonalAttribute) EMPTYATTR.clone();
+    attr.setStatus("");
+    Assert.assertTrue(attr.isEmptyStatus());
+  }
+  
+  /**
+   * Tests the {@link PersonalAttribute#isEmptyValue()} method for the given
+   * empty attribute. Must return true.
+   */
+  @Test
+  public void testToIsEmptyValueWithNull() {
+    final PersonalAttribute attr = (PersonalAttribute) EMPTYATTR.clone();
+    attr.setValue(null);
+    Assert.assertTrue(attr.isEmptyValue());
+  }
+  
+  /**
+   * Tests the {@link PersonalAttribute#isEmptyValue()} method for the given
+   * empty attribute. Must return true.
+   */
+  @Test
+  public void testToIsEmptyValue() {
+    Assert.assertTrue(EMPTYATTR.isEmptyValue());
+  }
+  
+  /**
+   * Tests the {@link PersonalAttribute#isEmptyComplexValue()} method for the
+   * given empty attribute. Must return true.
+   */
+  @Test
+  public void testToIsEmptyComplexValueWithNull() {
+    final PersonalAttribute attr = (PersonalAttribute) EMPTYATTR.clone();
+    attr.setComplexValue(null);
+    Assert.assertTrue(attr.isEmptyComplexValue());
+  }
+  
+  /**
+   * Tests the {@link PersonalAttribute#isEmptyComplexValue()} method for the
+   * given empty attribute. Must return true.
+   */
+  @Test
+  public void testToIsEmptyComplexValueWithEmptyComplexValue() {
+    Assert.assertTrue(EMPTYATTR.isEmptyComplexValue());
+  }
+  
+  /**
+   * Tests the {@link PersonalAttribute#clone()} method for the given attribute.
+   * Must return true.
+   */
+  @Test
+  public void testCloneToComplexValue() {
+    Assert.assertNotSame(complexAttrValue, complexAttrValue.clone());
+  }
+  
+  /**
+   * Tests the {@link PersonalAttribute#clone()} method for the given attribute.
+   * Must return true.
+   */
+  @Test
+  public void testCloneToValue() {
+    Assert.assertNotSame(ATTR_VALUE, ATTR_VALUE.clone());
+  }
+}
diff --git a/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/package-info.java.svn-base b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/package-info.java.svn-base
new file mode 100644
index 000000000..452602210
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/package-info.java.svn-base
@@ -0,0 +1,5 @@
+/**
+ * This package provides all JUnit test classes.
+ */
+package eu.stork.peps.tests;
+
diff --git a/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/AttributeProvidersMapTestCase.java b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/AttributeProvidersMapTestCase.java
new file mode 100644
index 000000000..2e8cc2e62
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/AttributeProvidersMapTestCase.java
@@ -0,0 +1,134 @@
+package eu.stork.peps.tests;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+import eu.stork.peps.auth.commons.AttributeProvider;
+import eu.stork.peps.auth.commons.AttributeProvidersMap;
+import eu.stork.peps.auth.commons.AttributeSource;
+import eu.stork.peps.auth.commons.Country;
+import eu.stork.peps.auth.commons.IAttributeProvidersMap;
+import eu.stork.peps.auth.commons.IPersonalAttributeList;
+import eu.stork.peps.auth.commons.PersonalAttributeList;
+
+/**
+ * The AttributeSource's Test Case.
+ * 
+ * @author Stelios Lelis (stelios.lelis@aegean.gr), Elias Pastos (ilias@aegean.gr)
+ * 
+ * @version $Revision: $, $Date: $
+ */
+public class AttributeProvidersMapTestCase {
+
+	@Test
+	public void testObjectOK1() {
+		IAttributeProvidersMap map = new AttributeProvidersMap();
+		AttributeSource source = new AttributeSource(new AttributeProvider("ID1", "Name 1"), "URL");
+		IPersonalAttributeList pal = new PersonalAttributeList();
+		boolean outcome = false;
+
+		//Add a single item
+		map.put(source, pal);
+
+		if ( map.containsKey(source) ) {
+			outcome = true;
+		}
+
+		assertTrue(outcome);
+	}
+
+	@Test
+	public void testObjectOK2() {
+		IAttributeProvidersMap map = new AttributeProvidersMap();
+		AttributeSource source = new AttributeSource(new AttributeProvider("ID1", "Name 1"), "URL");
+		IPersonalAttributeList pal = new PersonalAttributeList();
+		boolean outcome = false;
+
+		//Add a single item
+		map.put(source, pal);
+
+		if ( map.containsKey(source) ) {
+			if ( map.get(source)!=null ) {
+				outcome = true;
+			}
+		}
+
+		assertTrue(outcome);
+	}
+
+	@Test
+	public void testObjectOK3() {
+		IAttributeProvidersMap map = new AttributeProvidersMap();
+		AttributeSource source = new AttributeSource(new AttributeProvider("ID1", "Name 1"), "URL");
+		AttributeSource target = new AttributeSource(new AttributeProvider("ID1", "Name 1"), "URL");
+		IPersonalAttributeList pal = new PersonalAttributeList();
+		boolean outcome = false;
+
+		//Add a single item
+		map.put(source, pal);
+
+		if ( map.containsKey(target) ) {
+			outcome = true;
+		}
+
+		assertTrue(outcome);
+	}
+
+	@Test
+	public void testObjectOK4() {
+		IAttributeProvidersMap map = new AttributeProvidersMap();
+		AttributeSource source = new AttributeSource(new AttributeProvider("ID1", "Name 1"), "URL");
+		AttributeSource target = new AttributeSource(new AttributeProvider("ID1", "Name 1"), "URL");
+		IPersonalAttributeList pal = new PersonalAttributeList();
+		boolean outcome = false;
+
+		//Add a single item
+		map.put(source, pal);
+
+		if ( map.containsKey(target) ) {
+			if ( map.get(target)!=null ) {
+				outcome = true;
+			}
+		}
+
+		assertTrue(outcome);
+	}
+
+	@Test
+	public void testObjectNOK1() {
+		IAttributeProvidersMap map = new AttributeProvidersMap();
+		AttributeSource source = new AttributeSource(new AttributeProvider("ID1", "Name 1"), "URL");
+		AttributeSource target = new AttributeSource(new Country("ID1", "Name 1"), "URL");
+		IPersonalAttributeList pal = new PersonalAttributeList();
+		boolean outcome = false;
+
+		//Add a single item
+		map.put(source, pal);
+
+		if ( map.containsKey(target) ) {
+			outcome = true;
+		}
+
+		assertFalse(outcome);
+	}
+
+	@Test
+	public void testObjectNOK2() {
+		IAttributeProvidersMap map = new AttributeProvidersMap();
+		AttributeSource source = new AttributeSource(new AttributeProvider("ID1", "Name 1"), "URL");
+		AttributeSource target = new AttributeSource(new AttributeProvider("ID2", "Name 1"), "URL");
+		IPersonalAttributeList pal = new PersonalAttributeList();
+		boolean outcome = false;
+
+		//Add a single item
+		map.put(source, pal);
+
+		if ( map.containsKey(target) ) {
+			outcome = true;
+		}
+
+		assertFalse(outcome);
+	}
+}
diff --git a/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/AttributeSourceTestCase.java b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/AttributeSourceTestCase.java
new file mode 100644
index 000000000..31cabb612
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/AttributeSourceTestCase.java
@@ -0,0 +1,88 @@
+package eu.stork.peps.tests;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+import eu.stork.peps.auth.commons.AttributeProvider;
+import eu.stork.peps.auth.commons.AttributeSource;
+import eu.stork.peps.auth.commons.Country;
+
+/**
+ * The AttributeSource's Test Case.
+ * 
+ * @author Stelios Lelis (stelios.lelis@aegean.gr), Elias Pastos (ilias@aegean.gr)
+ * 
+ * @version $Revision: $, $Date: $
+ */
+public final class AttributeSourceTestCase {
+	private AttributeSource ap1 = new AttributeSource(new AttributeProvider("ID1", "Name 1"), "URL1");
+	private AttributeSource ap2 = new AttributeSource(new AttributeProvider("ID2", "Name 2"), "URL2");
+	private AttributeSource ap3 = new AttributeSource(new AttributeProvider("ID1", "Name 2"), "URL2");
+	private AttributeSource ap4 = new AttributeSource(new AttributeProvider("ID1", "Name 2"), "URL1");
+	private AttributeSource ap5 = new AttributeSource(new AttributeProvider("ID1", "Name 1"), "URL1");
+
+	private AttributeSource c1 = new AttributeSource(new Country("ID1", "Name 1"), "URL1");
+	private AttributeSource c2 = new AttributeSource(new Country("ID2", "Name 2"), "URL2");
+	private AttributeSource c3 = new AttributeSource(new Country("ID1", "Name 2"), "URL2");
+	private AttributeSource c4 = new AttributeSource(new Country("ID1", "Name 2"), "URL1");
+	private AttributeSource c5 = new AttributeSource(new Country("ID1", "Name 1"), "URL1");
+
+	@Test
+	public void testNotEquals1() {
+		assertFalse(ap1.equals(ap2));
+	}
+
+	@Test
+	public void testNotEquals2() {
+		assertFalse(ap1.equals(c1));
+	}
+
+	@Test
+	public void testNotEquals3() {
+		assertFalse(c1.equals(c2));
+	}
+
+	@Test
+	public void testEquals1() {
+		assertTrue(ap1.equals(ap3));
+	}
+
+	@Test
+	public void testEquals2() {
+		assertTrue(ap1.equals(ap4));
+	}
+
+	@Test
+	public void testEquals3() {
+		assertTrue(ap1.equals(ap5));
+	}
+
+	@Test
+	public void testEquals4() {
+		assertTrue(c1.equals(c3));
+	}
+
+	@Test
+	public void testEquals5() {
+		assertTrue(c1.equals(c4));
+	}
+
+	@Test
+	public void testEquals6() {
+		assertTrue(c1.equals(c5));
+	}
+
+	@Test
+	public void testEquals7() {
+		Object obj = ap5;
+		assertTrue(ap1.equals(obj));
+	}
+
+	@Test
+	public void testEquals8() {
+		Object obj = c5;
+		assertTrue(c1.equals(obj));
+	}
+}
diff --git a/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/AttributeUtilTestCase.java b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/AttributeUtilTestCase.java
new file mode 100644
index 000000000..77fc4b9c2
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/AttributeUtilTestCase.java
@@ -0,0 +1,537 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * 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 eu.stork.peps.tests;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertEquals;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.junit.Test;
+
+import eu.stork.peps.auth.commons.AttributeUtil;
+import eu.stork.peps.auth.commons.IPersonalAttributeList;
+import eu.stork.peps.auth.commons.PEPSValues;
+import eu.stork.peps.auth.commons.PersonalAttributeList;
+
+/**
+ * The AttributeUtil's Test Case.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com
+ * 
+ * @version $Revision: $, $Date: $
+ */
+public final class AttributeUtilTestCase {
+  
+  /**
+   * Empty String to be used on the tests.
+   */
+  private static final String EMPTY_STRING = "";
+  
+  /**
+   * Tuple value sample to be used on the tests.
+   */
+  private static final String[] TUPLE_STRING = new String[] { "age", "true",
+    "[18]", "Available" };
+  
+  /**
+   * Complex value to be used on escape/unescape tests.
+   */
+  private static final String COMPLEX_VAL = "postalCode=4100,"
+    + "apartmentNumber=A,state=Porto,countryCodeAddress=PT,streetNumber=379,"
+    + "streetName=Avenida Sidonio Pais,town=Porto,";
+  
+  /**
+   * Escaped Complex value to be used on escape/unescape tests.
+   */
+  private static final String ESC_COMPLEX_VAL = "postalCode=4100%44"
+    + "apartmentNumber=A%44state=Porto%44countryCodeAddress=PT%44"
+    + "streetNumber=379%44streetName=Avenida Sidonio Pais%44town=Porto%44";
+  
+  /**
+   * Simple value to be used on escape/unescape tests.
+   */
+  private static final String SIMPLE_VAL = "Avenida da Boavista, Porto";
+  
+  /**
+   * Escaped simple value to be used on escape/unescape tests.
+   */
+  private static final String ESC_SIMPLE_VAL = "Avenida da Boavista%44 Porto";
+  
+  /**
+   * Simple text to be used on escape/unescape tests. Must match the escaped
+   * text.
+   */
+  private static final String SIMPLE_TEXT = "John Doe";
+  
+  /**
+   * Tests the {@link AttributeUtil#escape(String)} method for the given complex
+   * attribute value (canonical address' example attribute value).
+   */
+  @Test
+  public void testEscapeSpecialCharsComplexVal() {
+    assertEquals(AttributeUtil.escape(COMPLEX_VAL), ESC_COMPLEX_VAL);
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#escape(String)} method for the given
+   * attribute value.
+   */
+  @Test
+  public void testEscapeSpecialCharsVal() {
+    assertEquals(AttributeUtil.escape(SIMPLE_VAL), ESC_SIMPLE_VAL);
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#escape(String)} method for the given simple
+   * text: no special characters to escape.
+   */
+  @Test
+  public void testEscapeNormalChars() {
+    assertEquals(AttributeUtil.escape(SIMPLE_TEXT), SIMPLE_TEXT);
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#unescape(String)} method for the given
+   * escape complex attribute value (canonical address' example attribute
+   * value).
+   */
+  @Test
+  public void testUnescapeSpecialCharsComplexVal() {
+    assertEquals(AttributeUtil.unescape(ESC_COMPLEX_VAL), COMPLEX_VAL);
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#escape(String)} method for the given escape
+   * attribute value.
+   */
+  @Test
+  public void testUnescapeSpecialCharsVal() {
+    assertEquals(AttributeUtil.unescape(ESC_SIMPLE_VAL), SIMPLE_VAL);
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#escape(String)} method for the given simple
+   * text: no special characters to unescape.
+   */
+  @Test
+  public void testUnescapeNormalChars() {
+    assertEquals(AttributeUtil.unescape(SIMPLE_TEXT), SIMPLE_TEXT);
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#appendIfNotNull(StringBuilder, Object)}
+   * method for the given empty string.
+   */
+  @Test
+  public void testAppendIfNotNullEmptyStr() {
+    final StringBuilder strBuilder = new StringBuilder(SIMPLE_TEXT);
+    AttributeUtil.appendIfNotNull(strBuilder, EMPTY_STRING);
+    assertEquals(strBuilder.toString(), SIMPLE_TEXT);
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#appendIfNotNull(StringBuilder, Object)}
+   * method for the given string.
+   */
+  @Test
+  public void testAppendIfNotNullStr() {
+    final StringBuilder strBuilder = new StringBuilder();
+    AttributeUtil.appendIfNotNull(strBuilder, SIMPLE_TEXT);
+    assertEquals(strBuilder.toString(), SIMPLE_TEXT);
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#appendIfNotNull(StringBuilder, Object)}
+   * method for the given null value.
+   */
+  @Test
+  public void testAppendIfNotNull() {
+    final StringBuilder strBuilder = new StringBuilder();
+    AttributeUtil.appendIfNotNull(strBuilder, null);
+    assertEquals(strBuilder.toString(), EMPTY_STRING);
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#listToString(List, String)} method for the
+   * given List with two values.
+   */
+  @Test
+  public void testListToStringTwoVals() {
+    final List<String> vals = new ArrayList<String>();
+    vals.add(SIMPLE_VAL);
+    vals.add(SIMPLE_TEXT);
+    
+    final StringBuilder strBuilder = new StringBuilder();
+    strBuilder.append(ESC_SIMPLE_VAL);
+    strBuilder.append(PEPSValues.ATTRIBUTE_VALUE_SEP.toString());
+    strBuilder.append(SIMPLE_TEXT);
+    strBuilder.append(PEPSValues.ATTRIBUTE_VALUE_SEP.toString());
+    
+    assertEquals(
+      AttributeUtil.listToString(vals,
+        PEPSValues.ATTRIBUTE_VALUE_SEP.toString()), strBuilder.toString());
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#listToString(List, String)} method for the
+   * given List with one values.
+   */
+  @Test
+  public void testListToStringOneVal() {
+    final List<String> vals = new ArrayList<String>();
+    vals.add(SIMPLE_VAL);
+    
+    final StringBuilder strBuilder = new StringBuilder();
+    strBuilder.append(ESC_SIMPLE_VAL);
+    strBuilder.append(PEPSValues.ATTRIBUTE_VALUE_SEP.toString());
+    
+    assertEquals(
+      AttributeUtil.listToString(vals,
+        PEPSValues.ATTRIBUTE_VALUE_SEP.toString()), strBuilder.toString());
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#listToString(List, String)} method for the
+   * given List with one value.
+   */
+  @Test
+  public void testListToStringEmptyVal() {
+    final List<String> vals = new ArrayList<String>();
+    
+    final StringBuilder strBuilder = new StringBuilder();
+    
+    assertEquals(
+      AttributeUtil.listToString(vals,
+        PEPSValues.ATTRIBUTE_VALUE_SEP.toString()), strBuilder.toString());
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#mapToString(java.util.Map, String)} method
+   * for the given Map with one value.
+   */
+  @Test
+  public void testMapToStringOneVal() {
+    final Map<String, String> vals = new HashMap<String, String>();
+    vals.put("CanonicalAddress", COMPLEX_VAL);
+    
+    final StringBuilder strBuilder = new StringBuilder();
+    strBuilder.append("CanonicalAddress=");
+    strBuilder.append(ESC_COMPLEX_VAL);
+    strBuilder.append(PEPSValues.ATTRIBUTE_VALUE_SEP.toString());
+    
+    assertEquals(AttributeUtil.mapToString(vals,
+      PEPSValues.ATTRIBUTE_VALUE_SEP.toString()), strBuilder.toString());
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#mapToString(java.util.Map, String)} method
+   * for the given empty Map.
+   */
+  @Test
+  public void testMapToStringEmptyVal() {
+    final Map<String, String> vals = new HashMap<String, String>();
+    
+    final StringBuilder strBuilder = new StringBuilder();
+    
+    assertEquals(AttributeUtil.mapToString(vals,
+      PEPSValues.ATTRIBUTE_VALUE_SEP.toString()), strBuilder.toString());
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidValue(String)} method for the given
+   * invalid List.
+   */
+  @Test
+  public void testIsValidValueInvalidList() {
+    final StringBuilder strBuilder = new StringBuilder();
+    strBuilder.append(ESC_SIMPLE_VAL);
+    strBuilder.append("]");
+    assertFalse(AttributeUtil.isValidValue(strBuilder.toString()));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidValue(String)} method for the given
+   * null value.
+   */
+  @Test
+  public void testIsValidValueNullList() {
+    assertFalse(AttributeUtil.isValidValue(null));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidValue(String)} method for the given
+   * empty List.
+   */
+  @Test
+  public void testIsValidValueEmptyList() {
+    assertTrue(AttributeUtil.isValidValue("[]"));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidValue(String)} method for the given
+   * empty List.
+   */
+  @Test
+  public void testIsValidValueEmptyCommaList() {
+    assertTrue(AttributeUtil.isValidValue("[,]"));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidValue(String)} method for the given
+   * one simple value List.
+   */
+  @Test
+  public void testIsValidValueOneValueList() {
+    final StringBuilder strBuilder = new StringBuilder();
+    strBuilder.append("[");
+    strBuilder.append(ESC_SIMPLE_VAL);
+    strBuilder.append("]");
+    assertTrue(AttributeUtil.isValidValue(strBuilder.toString()));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidValue(String)} method for the given
+   * one simple value List.
+   */
+  @Test
+  public void testIsValidValueOneValueCommaList() {
+    final StringBuilder strBuilder = new StringBuilder();
+    strBuilder.append("[");
+    strBuilder.append(ESC_SIMPLE_VAL);
+    strBuilder.append(PEPSValues.ATTRIBUTE_VALUE_SEP.toString());
+    strBuilder.append("]");
+    assertTrue(AttributeUtil.isValidValue(strBuilder.toString()));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidValue(String)} method for the given
+   * one complex value List.
+   */
+  @Test
+  public void testIsValidValueOneComplexValueList() {
+    final StringBuilder strBuilder = new StringBuilder();
+    strBuilder.append("[");
+    strBuilder.append(ESC_COMPLEX_VAL);
+    strBuilder.append("]");
+    assertTrue(AttributeUtil.isValidValue(strBuilder.toString()));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidValue(String)} method for the given
+   * one complex value List.
+   */
+  @Test
+  public void testIsValidValueOneComplexValueCommaList() {
+    final StringBuilder strBuilder = new StringBuilder();
+    strBuilder.append("[");
+    strBuilder.append(ESC_COMPLEX_VAL);
+    strBuilder.append(PEPSValues.ATTRIBUTE_VALUE_SEP.toString());
+    strBuilder.append("]");
+    assertTrue(AttributeUtil.isValidValue(strBuilder.toString()));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidValue(String)} method for the given
+   * multi value List.
+   */
+  @Test
+  public void testIsValidValueMultiValueList() {
+    final StringBuilder strBuilder = new StringBuilder();
+    strBuilder.append("[");
+    strBuilder.append(ESC_SIMPLE_VAL);
+    strBuilder.append(PEPSValues.ATTRIBUTE_VALUE_SEP.toString());
+    strBuilder.append(SIMPLE_TEXT);
+    strBuilder.append(PEPSValues.ATTRIBUTE_VALUE_SEP.toString());
+    strBuilder.append("]");
+    assertTrue(AttributeUtil.isValidValue(strBuilder.toString()));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidValue(String)} method for the given
+   * invalid multi value List.
+   */
+  @Test
+  public void testIsValidValueInvalidMultiValueList() {
+    final StringBuilder strBuilder = new StringBuilder();
+    strBuilder.append(ESC_SIMPLE_VAL);
+    strBuilder.append(PEPSValues.ATTRIBUTE_VALUE_SEP.toString());
+    strBuilder.append(SIMPLE_TEXT);
+    strBuilder.append(PEPSValues.ATTRIBUTE_VALUE_SEP.toString());
+    strBuilder.append("]");
+    assertFalse(AttributeUtil.isValidValue(strBuilder.toString()));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidType(String)} method for the given
+   * true type.
+   */
+  @Test
+  public void testIsValidTypetrue() {
+    assertTrue(AttributeUtil.isValidType("true"));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidType(String)} method for the given
+   * True type.
+   */
+  @Test
+  public void testIsValidTypeTrue() {
+    assertTrue(AttributeUtil.isValidType("True"));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidType(String)} method for the given
+   * TRUE type.
+   */
+  @Test
+  public void testIsValidTypeTRUE() {
+    assertTrue(AttributeUtil.isValidType("TRUE"));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidType(String)} method for the given
+   * invalid type.
+   */
+  @Test
+  public void testIsValidTypeInvalidType() {
+    assertFalse(AttributeUtil.isValidType("str"));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidType(String)} method for the given
+   * false type.
+   */
+  @Test
+  public void testIsValidTypefalse() {
+    assertTrue(AttributeUtil.isValidType("false"));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidType(String)} method for the given
+   * False type.
+   */
+  @Test
+  public void testIsValidTypeFalse() {
+    assertTrue(AttributeUtil.isValidType("False"));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidType(String)} method for the given
+   * FALSE type.
+   */
+  @Test
+  public void testIsValidTypeFALSEVal() {
+    assertTrue(AttributeUtil.isValidType("False"));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidType(String)} method for the given
+   * null.
+   */
+  @Test
+  public void testIsValidTypeNullVal() {
+    assertFalse(AttributeUtil.isValidType(null));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#hasValidTuples(String[])} method for the
+   * given valid tuple.
+   */
+  @Test
+  public void testHasValidTuples() {
+    assertTrue(AttributeUtil.hasValidTuples(TUPLE_STRING));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#hasValidTuples(String[])} method for the
+   * given invalid tuple. 
+   */
+  @Test
+  public void testHasValidTuplesInvalid() {
+    final String[] tuple = new String[]{"name", "type"};
+    assertFalse(AttributeUtil.hasValidTuples(tuple));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#hasValidTuples(String[])} method for the
+   * given invalid tuple with valid size.
+   */
+  @Test
+  public void testHasValidTuplesSameSizeInvalidValues() {
+    final String[] tuple = new String[] { "age", "type", "[18]", "Available"};
+    assertFalse(AttributeUtil.hasValidTuples(tuple));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#hasValidTuples(String[])} method for the
+   * given null value.
+   */
+  @Test
+  public void testHasValidTuplesNull() {
+    assertFalse(AttributeUtil.hasValidTuples(null));
+  }
+  
+  /**
+   * Tests the
+   * {@link AttributeUtil#checkMandatoryAttributes(IPersonalAttributeList)}
+   * method for the given attribute list..
+   */
+  @Test
+  public void testCheckMandatoryAttributes() {
+    final IPersonalAttributeList attrList = new PersonalAttributeList();
+    attrList.populate("isAgeOver:true:[18,]:Available;");
+    assertTrue(AttributeUtil.checkMandatoryAttributes(attrList));
+    
+  }
+  
+  /**
+   * Tests the
+   * {@link AttributeUtil#checkMandatoryAttributes(IPersonalAttributeList)}
+   * method for the given null value.
+   */
+  @Test(expected = NullPointerException.class)
+  public void testCheckMandatoryAttributesNullAttrList() {
+    assertTrue(AttributeUtil.checkMandatoryAttributes(null));
+  }
+  
+  /**
+   * Tests the
+   * {@link AttributeUtil#checkMandatoryAttributes(IPersonalAttributeList)}
+   * method for the given empty attribute list.
+   */
+  @Test
+  public void testCheckMandatoryAttributesEmptyAttrList() {
+    final IPersonalAttributeList attrList = new PersonalAttributeList();
+    assertTrue(AttributeUtil.checkMandatoryAttributes(attrList));
+  }
+  
+  /**
+   * Tests the
+   * {@link AttributeUtil#checkMandatoryAttributes(IPersonalAttributeList)}
+   * method for the given attribute list (missing mandatory attribute).
+   */
+  @Test
+  public void testCheckMandatoryAttributesMissingAttr() {
+    final IPersonalAttributeList attrList = new PersonalAttributeList();
+    attrList.populate("isAgeOver:true:[]:NotAvailable;");
+    assertFalse(AttributeUtil.checkMandatoryAttributes(attrList));
+  }
+  
+}
diff --git a/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/DateUtilTestCase.java b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/DateUtilTestCase.java
new file mode 100644
index 000000000..5d2296997
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/DateUtilTestCase.java
@@ -0,0 +1,294 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * 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 eu.stork.peps.tests;
+
+import java.sql.Timestamp;
+import java.util.Properties;
+
+import org.joda.time.DateTime;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import eu.stork.peps.auth.commons.DateUtil;
+import eu.stork.peps.auth.commons.PEPSUtil;
+import eu.stork.peps.auth.commons.exceptions.SecurityPEPSException;
+
+/**
+ * The PersonalAttribute's Test Case.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.2 $, $Date: 2010-11-17 05:17:03 $
+ */
+public final class DateUtilTestCase {
+  
+  /**
+   * Stork Format date.
+   */
+  private static final String FORMAT = "yyyyMMdd";
+  
+  /**
+   * Expected 10 value.
+   */
+  private static final int TEN = 10;
+  
+  /**
+   * Expected 11 value.
+   */
+  private static final int ELEVEN = 11;
+  
+  /**
+   * The testing Date ("current" date).
+   */
+  private static final DateTime TESTDATE = new DateTime(2011, 10, 10, 15, 20,
+    0, 0);
+  
+  /**
+   * Init DateUtilTestCase class.
+   */
+  @BeforeClass
+  public static void runsBeforeTheTestSuite() {
+    final Properties configs = new Properties();
+    configs.setProperty("invalidAgeDateValue.code", "35");
+    configs.setProperty("invalidAttributeValue.code", "34");
+    configs
+      .setProperty(
+        "invalidAttributeValue.message",
+        "Unexpected or invalid content was encountered within a "
+        + "<saml:Attribute> or <saml:AttributeValue> element.");
+    PEPSUtil.createInstance(configs);
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given year against
+   * the testDate: 2011-10-10 15:20:00.0. Must return 10.
+   */
+  @Test
+  public void calculateAgeFromYear() {
+    Assert.assertTrue(TEN == DateUtil.calculateAge("2000", TESTDATE, FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given year and month
+   * against the testDate: 2011-10-10 15:20:00.0. Must return 11.
+   */
+  @Test
+  public void calculateAgeFromEarlyMonth() {
+    Assert.assertTrue(ELEVEN == DateUtil.calculateAge("200001", TESTDATE,
+      FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given year and month
+   * against the testDate: 2011-10-10 15:20:00.0. Must return 10.
+   */
+  @Test
+  public void calculateAgeFromSameMonth() {
+    Assert.assertTrue(TEN == DateUtil.calculateAge("200010", TESTDATE, FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given year and month
+   * against the testDate: 2011-10-10 15:20:00.0. Must return 10.
+   */
+  @Test
+  public void calculateAgeFromLaterMonth() {
+    Assert.assertTrue(TEN == DateUtil.calculateAge("200011", TESTDATE, FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given full date
+   * against the testDate: 2011-10-10 15:20:00.0. Must return 11.
+   */
+  @Test
+  public void calculateAgeFromEarlyFullDate() {
+    Assert.assertTrue(ELEVEN == DateUtil.calculateAge("20000101", TESTDATE,
+      FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given full date
+   * against the testDate: 2011-10-10 15:20:00.0. Must return 11.
+   */
+  @Test
+  public void calculateAgeFromSameDay() {
+    Assert.assertTrue(ELEVEN == DateUtil.calculateAge("20001010", TESTDATE,
+      FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given full date
+   * against the testDate: 2011-10-10 15:20:00.0. Must return 10.
+   */
+  @Test
+  public void calculateAgeFromLaterFullDate() {
+    Assert.assertTrue(TEN == DateUtil
+      .calculateAge("20001011", TESTDATE, FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given full date
+   * against the testDate: 2011-10-10 15:20:00.0. Must return a
+   * SecurityPEPSException exception.
+   */
+  @Test(expected = SecurityPEPSException.class)
+  public void calculateAgeFromInvalidDate() {
+    DateUtil.calculateAge("200", TESTDATE, FORMAT);
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given full date
+   * against the testDate: 2011-10-10 15:20:00.0. Must return a
+   * SecurityPEPSException exception.
+   */
+  @Test(expected = SecurityPEPSException.class)
+  public void calculateAgeFromInvalidMonth() {
+    DateUtil.calculateAge("200013", TESTDATE, FORMAT);
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given full date
+   * against the testDate: 2011-10-10 15:20:00.0. Must return a
+   * SecurityPEPSException exception.
+   */
+  @Test(expected = SecurityPEPSException.class)
+  public void calculateAgeFromInvalidDay() {
+    DateUtil.calculateAge("20000230", TESTDATE, FORMAT);
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given full date
+   * against the testDate: 2011-10-10 15:20:00.0. Must return a
+   * SecurityPEPSException exception.
+   */
+  @Test(expected = SecurityPEPSException.class)
+  public void calculateAgeFromNullDate() {
+    DateUtil.calculateAge(null, TESTDATE, FORMAT);
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given full date
+   * against the testDate: 2011-10-10 15:20:00.0. Must return a
+   * SecurityPEPSException exception.
+   */
+  @Test(expected = SecurityPEPSException.class)
+  public void calculateAgeFromNullCurDate() {
+    DateUtil.calculateAge("2000", null, FORMAT);
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given full date
+   * against the testDate: 2011-10-10 15:20:00.0. Must return a
+   * SecurityPEPSException exception.
+   */
+  @Test(expected = SecurityPEPSException.class)
+  public void calculateAgeFromNullFormat() {
+    DateUtil.calculateAge("2000", TESTDATE, null);
+  }
+  
+  /**
+   * Tests the {@link DateUtil#isValidFormatDate} method for the given year.
+   * Must return true
+   */
+  @Test
+  public void isValidFormatDateFromYear() {
+    Assert.assertTrue(DateUtil.isValidFormatDate("2000", FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#isValidFormatDate} method for the given year and
+   * month. Must return true.
+   */
+  @Test
+  public void isValidFormatDateFromMonth() {
+    Assert.assertTrue(DateUtil.isValidFormatDate("200001", FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#isValidFormatDate} method for the given year.
+   * Must return false.
+   */
+  @Test
+  public void isValidFormatDate() {
+    Assert.assertTrue(DateUtil.isValidFormatDate("20000101", FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#isValidFormatDate} method for the given year.
+   * Must return false.
+   */
+  @Test
+  public void isValidFormatDateInvalidYear() {
+    Assert.assertFalse(DateUtil.isValidFormatDate("200", FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#isValidFormatDate} method for the given year.
+   * Must return false.
+   */
+  @Test
+  public void isValidFormatDateInvalidMonth() {
+    Assert.assertFalse(DateUtil.isValidFormatDate("200013", FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#isValidFormatDate} method for the given year.
+   * Must return false.
+   */
+  @Test
+  public void isValidFormatDateInvalidDate() {
+    Assert.assertFalse(DateUtil.isValidFormatDate("20010229", FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#isValidFormatDate} method for the given year.
+   * Must return false.
+   */
+  @Test
+  public void isValidFormatDateNullDate() {
+    Assert.assertFalse(DateUtil.isValidFormatDate(null, FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#isValidFormatDate} method for the given year.
+   * Must return false.
+   */
+  @Test
+  public void isValidFormatDateNullFormat() {
+    Assert.assertFalse(DateUtil.isValidFormatDate("2000", null));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#currentTimeStamp()} method for the current
+   * TimeStamp (TS). Must return true.
+   */
+  @Test
+  public void testCurrentTimeStampBefore() {
+    Timestamp ts = DateUtil.currentTimeStamp();
+    Assert.assertNotSame(ts, DateUtil.currentTimeStamp());
+  }
+  
+  /**
+   * Tests the {@link DateUtil#currentTimeStamp()} method for the current
+   * TimeStamp (TS). Must return true.
+   */
+  @Test
+  public void testCurrentTimeStampAfter() {
+    Timestamp ts = DateUtil.currentTimeStamp();
+    Assert.assertEquals(DateUtil.currentTimeStamp(), ts);
+  }
+  
+}
diff --git a/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/PEPSUtilTestCase.java b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/PEPSUtilTestCase.java
new file mode 100644
index 000000000..d4841ed43
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/PEPSUtilTestCase.java
@@ -0,0 +1,553 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * 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 eu.stork.peps.tests;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotSame;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertFalse;
+
+import java.util.Properties;
+
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import eu.stork.peps.auth.commons.IPersonalAttributeList;
+import eu.stork.peps.auth.commons.PEPSErrors;
+import eu.stork.peps.auth.commons.PEPSParameters;
+import eu.stork.peps.auth.commons.PEPSUtil;
+import eu.stork.peps.auth.commons.PersonalAttributeList;
+import eu.stork.peps.auth.commons.exceptions.InternalErrorPEPSException;
+import eu.stork.peps.auth.commons.exceptions.InvalidParameterPEPSException;
+
+/**
+ * The PEPSUtil's Test Case.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com
+ * 
+ * @version $Revision: $, $Date: $
+ */
+public final class PEPSUtilTestCase {
+  
+  /**
+   * Message example.
+   */
+  private static final String MESSAGE_SAMPLE = "003002 - Authentication Failed";
+  
+  /**
+   * Error message example.
+   */
+  private static final String ERROR_MESSAGE_SAMPLE = "Authentication Failed";
+  
+  /**
+   * Error code example.
+   */
+  private static final String ERROR_CODE_SAMPLE = "003002";
+  
+  /**
+   * Properties values for testing proposes.
+   */
+  private static final Properties CONFIGS1 = new Properties();
+  
+  /**
+   * Properties values for testing proposes.
+   */
+  private static final Properties CONFIGS2 = new Properties();
+  
+  /**
+   * The empty string value: "".
+   */
+  private static final String EMPTY_STRING = "";
+  
+  /**
+   * The empty byte value: [].
+   */
+  private static final byte[] EMPTY_BYTE = new byte[] {};
+  
+  /**
+   * The empty byte hash value.
+   */
+  private static final byte[] EMPTY_HASH_BYTE = new byte[] { -49, -125, -31,
+    53, 126, -17, -72, -67, -15, 84, 40, 80, -42, 109, -128, 7, -42, 32, -28,
+    5, 11, 87, 21, -36, -125, -12, -87, 33, -45, 108, -23, -50, 71, -48, -47,
+    60, 93, -123, -14, -80, -1, -125, 24, -46, -121, 126, -20, 47, 99, -71, 49,
+    -67, 71, 65, 122, -127, -91, 56, 50, 122, -7, 39, -38, 62 };
+  
+  /**
+   * The SAML example byte[] value.
+   */
+  private static final byte[] SAML_BYTE_SAMPLE = new byte[] { 60, 115, 97, 109,
+    108, 62, 46, 46, 46, 60, 47, 115, 97, 109, 108 };
+  
+  /**
+   * The SAML's Base64 example value.
+   */
+  private static final String SAML_BASE64_SAMPLE = "PHNhbWw+Li4uPC9zYW1s";
+  
+  /**
+   * The SAML's Base64 byte[] example value.
+   */
+  private static byte[] SAML_BASE64_BYTE_SAMPLE = new byte[] { 80, 72, 78, 104,
+    98, 87, 119, 43, 76, 105, 52, 117, 80, 67, 57, 122, 89, 87, 49, 115 };
+  
+  /**
+   * The SAML's Base64 Hash byte[] example value.
+   */
+  private static byte[] HASH_BYTE_SAMPLE = new byte[] { 67, 38, 11, 115, 49,
+    -5, 54, -85, 38, 43, -99, 96, 71, -41, 50, -96, 71, -86, 90, -97, 66, -67,
+    90, 101, 30, 82, -13, 60, -106, -72, -103, -75, 19, 2, -107, 107, -6, -56,
+    34, -111, -44, -57, -26, -5, 33, 78, -1, 30, 21, 74, -26, 118, -46, -12,
+    -102, 12, -56, 30, -59, -104, -21, -42, -103, 82 };
+  
+  /**
+   * Init PEPSUtilTestCase class.
+   */
+  @BeforeClass
+  public static void runsBeforeTheTestSuite() {
+    
+    CONFIGS1.setProperty("max.attrList.size", "20000");
+    CONFIGS1.setProperty("attrList.code", "202005");
+    CONFIGS1.setProperty("attrList.message", "invalid.attrList.parameter");
+    
+    CONFIGS1.setProperty("max.qaaLevel.size", "1");
+    CONFIGS1.setProperty("max.spUrl.size", "inv");
+    CONFIGS1.setProperty("validation.active", "true");
+    CONFIGS1.setProperty("hashDigest.className",
+      "org.bouncycastle.crypto.digests.SHA512Digest");
+    CONFIGS1.setProperty("invalidAgeDateValue.code", "35");
+    CONFIGS1.setProperty("invalidAttributeValue.code", "34");
+    CONFIGS1.setProperty("invalidAttributeValue.message",
+      "Unexpected or invalid content was encountered within a "
+        + "<saml:Attribute> or <saml:AttributeValue> element.");
+  }
+   
+  /**
+   * Tests the {@link PEPSUtil#createInstance(Properties)} method for the given
+   * properties object.
+   */
+  @Test
+  public void testCreateInstance() {
+    Assert.assertNotNull(PEPSUtil.createInstance(CONFIGS2));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getConfigs()}.
+   */
+  @Test
+  public void testGetConfigs() {
+    final PEPSUtil pepsUtils = PEPSUtil.createInstance(CONFIGS1);
+    assertEquals(pepsUtils.getConfigs(), CONFIGS1);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getConfigs()}.
+   */
+  @Test
+  public void testGetConfigsDifferent() {
+    final PEPSUtil pepsUtils = PEPSUtil.createInstance(CONFIGS1);
+    assertNotSame(pepsUtils.getConfigs(), CONFIGS2);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getConfig(String)} method for the given existing
+   * config.
+   */
+  @Test
+  public void testGetConfigExists() {
+    assertEquals(PEPSUtil.getConfig("hashDigest.className"),
+      "org.bouncycastle.crypto.digests.SHA512Digest");
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getConfig(String)} method for the given not
+   * existing config.
+   */
+  @Test
+  public void testGetConfigNoExists() {
+    assertNull(PEPSUtil.getConfig("doesnt.exists"));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getConfig(String)} method for the given null
+   * value.
+   */
+  @Test(expected = NullPointerException.class)
+  public void testGetConfigNull() {
+    assertNull(PEPSUtil.getConfig(null));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#isValidParameter(String, String)} method for the
+   * given param values.
+   */
+  @Test
+  public void testIsValidParameterExists() {
+    assertTrue(PEPSUtil.isValidParameter("qaaLevel", "1"));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#isValidParameter(String, String)} method for the
+   * given param values.
+   */
+  @Test
+  public void testIsValidParameterExistsGreat() {
+    assertFalse(PEPSUtil.isValidParameter("qaaLevel", "12"));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#isValidParameter(String, String)} method for the
+   * given param values.
+   */
+  @Test
+  public void testIsValidParameterExistsIvalidConf() {
+    assertFalse(PEPSUtil
+      .isValidParameter("spUrl", "http://localhost:8080/SP/"));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#isValidParameter(String, String)} method for the
+   * given param values.
+   */
+  @Test
+  public void testIsValidParameterNotExists() {
+    assertFalse(PEPSUtil.isValidParameter("doesntexists",
+      "http://localhost:8080/SP/"));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#isValidParameter(String, String)} method for the
+   * given param values.
+   */
+  @Test
+  public void testIsValidParameterNullParamName() {
+    assertFalse(PEPSUtil.isValidParameter(null, "http://localhost:8080/SP/"));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#isValidParameter(String, String)} method for the
+   * given param values.
+   */
+  @Test
+  public void testIsValidParameterNullParamValue() {
+    assertFalse(PEPSUtil.isValidParameter("spUrl", null));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#validateParameter(String, String, Object)} method
+   * for the given object values.
+   */
+  @Test
+  public void testValidateParameterValid() {
+    final IPersonalAttributeList persAttrList = new PersonalAttributeList();
+    persAttrList.populate("isAgeOver:true:[15,]:Available;");
+    PEPSUtil.validateParameter("ServiceProviderAction",
+      PEPSParameters.ATTRIBUTE_LIST.toString(), persAttrList);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#validateParameter(String, String, Object)} method
+   * for the given string values.
+   */
+  @Test(expected = InvalidParameterPEPSException.class)
+  public void testValidateParameterNull() {
+    PEPSUtil.validateParameter("ServiceProviderAction",
+      PEPSParameters.ATTRIBUTE_LIST.toString(), null);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#validateParameter(String, String, String)} method
+   * for the given string values.
+   * 
+   * The tested class just invokes
+   * {@link PEPSUtil#validateParameter(String, String, String, String, String)}
+   * so further tests will be later.
+   */
+  @Test
+  public void testValidateParameter() {
+    PEPSUtil.validateParameter("ServiceProviderAction",
+      PEPSParameters.ATTRIBUTE_LIST.toString(),
+      "isAgeOver:true:[15,]:Available;");
+  }
+  
+  /**
+   * Tests the
+   * {@link PEPSUtil#validateParameter(String, String, String, PEPSErrors)}
+   * method for the given string value and {@link PEPSErrors} enum.
+   * 
+   * The tested class just invokes
+   * {@link PEPSUtil#validateParameter(String, String, String, String, String)}
+   * so further tests will be later.
+   */
+  @Test
+  public void testValidateParameterPEPSErrors() {
+    PEPSUtil.validateParameter("CountrySelectorAction",
+      PEPSParameters.ATTRIBUTE_LIST.toString(),
+      "isAgeOver:true:[15,]:Available;",
+      PEPSErrors.SP_COUNTRY_SELECTOR_INVALID_ATTR);
+  }
+  
+  /**
+   * Tests the
+   * {@link PEPSUtil#validateParameter(String, String, String, String, String)}
+   * method for the given string values.
+   */
+  @Test
+  public void testValidateParameterValidParams() {
+    PEPSUtil.validateParameter("ServiceProviderAction", "qaaLevel", "1",
+      "qaaLevel.code", "qaaLevel.message");
+  }
+  
+  /**
+   * Tests the
+   * {@link PEPSUtil#validateParameter(String, String, String, String, String)}
+   * method for the given string values.
+   */
+  @Test(expected = InvalidParameterPEPSException.class)
+  public void testValidateParameterInvalidParamValue() {
+    PEPSUtil.validateParameter("ServiceProviderAction", "qaaLevel", "10",
+      "qaaLevel.code", "qaaLevel.message");
+  }
+  
+  /**
+   * Tests the
+   * {@link PEPSUtil#validateParameter(String, String, String, String, String)}
+   * method for the given string values.
+   */
+  @Test(expected = InvalidParameterPEPSException.class)
+  public void testValidateParameterInvalidParamName() {
+    PEPSUtil.validateParameter("ServiceProviderAction", "doesnt.exists", "1",
+      "qaaLevel.code", "qaaLevel.message");
+  }
+  
+  /**
+   * Tests the
+   * {@link PEPSUtil#validateParameter(String, String, String, String, String)}
+   * method for the given string values.
+   */
+  @Test(expected = InvalidParameterPEPSException.class)
+  public void testValidateParameterNullParamName() {
+    PEPSUtil.validateParameter("ServiceProviderAction", null, "1",
+      "qaaLevel.code", "qaaLevel.message");
+  }
+  
+  /**
+   * Tests the
+   * {@link PEPSUtil#validateParameter(String, String, String, String, String)}
+   * method for the given string values.
+   */
+  @Test(expected = InvalidParameterPEPSException.class)
+  public void testValidateParameterNullParamValue() {
+    PEPSUtil.validateParameter("ServiceProviderAction", "qaaLevel", null,
+      "qaaLevel.code", "qaaLevel.message");
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#encodeSAMLToken(byte[])} method for the given
+   * string value.
+   */
+  @Test
+  public void testEncodeSAMLToken() {
+    assertEquals(PEPSUtil.encodeSAMLToken(SAML_BYTE_SAMPLE), SAML_BASE64_SAMPLE);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#encodeSAMLToken(byte[])} method for the given
+   * null.
+   */
+  @Test(expected = NullPointerException.class)
+  public void testEncodeSAMLTokenNull() {
+    assertNotSame(PEPSUtil.encodeSAMLToken(null), SAML_BASE64_SAMPLE);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#encodeSAMLToken(byte[])} method for the given
+   * empty byte[] value.
+   */
+  @Test
+  public void testEncodeSAMLTokenEmpty() {
+    assertEquals(PEPSUtil.encodeSAMLToken(EMPTY_BYTE), EMPTY_STRING);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#decodeSAMLToken(byte[])} method for the given
+   * byte[] value.
+   */
+  @Test
+  public void testDecodeSAMLToken() {
+    assertArrayEquals(PEPSUtil.decodeSAMLToken(SAML_BASE64_SAMPLE),
+      SAML_BYTE_SAMPLE);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#decodeSAMLToken(byte[])} method for the given
+   * null value.
+   */
+  @Test(expected = NullPointerException.class)
+  public void testDecodeSAMLTokenNull() {
+    assertNotSame(PEPSUtil.decodeSAMLToken(null), SAML_BYTE_SAMPLE);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#decodeSAMLToken(byte[])} method for the given
+   * empty string value.
+   */
+  @Test(expected = StringIndexOutOfBoundsException.class)
+  public void testDecodeSAMLTokenEmpty() {
+    assertTrue(PEPSUtil.decodeSAMLToken(EMPTY_STRING) == EMPTY_BYTE);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#hashPersonalToken(byte[])} method for the given
+   * byte[] value.
+   */
+  @Test
+  public void testHashPersonalToken() {
+    assertArrayEquals(PEPSUtil.hashPersonalToken(SAML_BASE64_BYTE_SAMPLE),
+      HASH_BYTE_SAMPLE);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#hashPersonalToken(byte[])} method for the given
+   * null value.
+   */
+  @Test(expected = InternalErrorPEPSException.class)
+  public void testHashPersonalTokenNull() {
+    assertNull(PEPSUtil.hashPersonalToken(null));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#hashPersonalToken(byte[])} method for the given
+   * empty value.
+   */
+  @Test
+  public void testHashPersonalTokenEmpty() {
+    assertArrayEquals(PEPSUtil.hashPersonalToken(EMPTY_BYTE), EMPTY_HASH_BYTE);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorCode(String)} method for the given
+   * correct message.
+   */
+  @Test
+  public void testGetStorkErrorCodeExists() {
+    assertEquals(PEPSUtil.getStorkErrorCode(MESSAGE_SAMPLE), ERROR_CODE_SAMPLE);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorCode(String)} method for the given
+   * invalid message.
+   */
+  @Test
+  public void testGetStorkErrorCodeNoExists() {
+    assertNull(PEPSUtil.getStorkErrorCode(ERROR_MESSAGE_SAMPLE));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorCode(String)} method for the given
+   * empty message.
+   */
+  @Test
+  public void testGetStorkErrorCodeEmpty() {
+    assertNull(PEPSUtil.getStorkErrorCode(EMPTY_STRING));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorCode(String)} method for the given
+   * null message.
+   */
+  @Test
+  public void testGetStorkErrorCodeNull() {
+    assertNull(PEPSUtil.getStorkErrorCode(null));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorCode(String)} method for the given
+   * invalid message.
+   */
+  @Test
+  public void testGetStorkErrorCodeWithSepFake() {
+    assertNull(PEPSUtil.getStorkErrorCode("-"));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorCode(String)} method for the given
+   * invalid message.
+   */
+  @Test
+  public void testGetStorkErrorCodeWithSepAndCodeFake() {
+    assertNull(PEPSUtil.getStorkErrorCode("000001 -"));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorMessage(String)} method for the
+   * given correct message.
+   */
+  @Test
+  public void testGetStorkErrorMessageExists() {
+    assertEquals(PEPSUtil.getStorkErrorMessage(MESSAGE_SAMPLE),
+      ERROR_MESSAGE_SAMPLE);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorMessage(String)} method for the
+   * given invalid message.
+   */
+  @Test
+  public void testGetStorkErrorMessageNoExists() {
+    assertEquals(PEPSUtil.getStorkErrorMessage(ERROR_MESSAGE_SAMPLE),
+      ERROR_MESSAGE_SAMPLE);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorMessage(String)} method for the
+   * given empty message.
+   */
+  @Test
+  public void testGetStorkErrorMessageEmpty() {
+    assertEquals(PEPSUtil.getStorkErrorMessage(EMPTY_STRING),
+      EMPTY_STRING);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorMessage(String)} method for the
+   * given null message.
+   */
+  @Test
+  public void testGetStorkErrorMessageNull() {
+    assertNull(PEPSUtil.getStorkErrorMessage(null));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorMessage(String)} method for the
+   * given invalid message.
+   */
+  @Test
+  public void testGetStorkErrorMessageWithSepFake() {
+    assertEquals(PEPSUtil.getStorkErrorMessage("-"),"-");
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorMessage(String)} method for the
+   * given invalid message.
+   */
+  @Test
+  public void testGetStorkErrorMessageWithSepAndCodeFake() {
+    assertEquals(PEPSUtil.getStorkErrorMessage("000001 -"),"000001 -");
+  }
+  
+}
diff --git a/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/PersonalAttributeListTestCase.java b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/PersonalAttributeListTestCase.java
new file mode 100644
index 000000000..7052b320a
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/PersonalAttributeListTestCase.java
@@ -0,0 +1,747 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * 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 eu.stork.peps.tests;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import eu.stork.peps.auth.commons.PersonalAttribute;
+import eu.stork.peps.auth.commons.PersonalAttributeList;
+import eu.stork.peps.auth.commons.STORKStatusCode;
+
+/**
+ * The PersonalAttributeList's Test Case.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.5 $, $Date: 2010-11-17 05:17:02 $
+ */
+public final class PersonalAttributeListTestCase {
+  
+  /**
+   * isAgeOver constant value.
+   */
+  private static final String ISAGEOVER_CONS = "isAgeOver";
+  
+  /**
+   * 1 constant value.
+   */
+  private static final int ONE_CONS = 1;
+  
+  /**
+   * 2 constant value.
+   */
+  private static final int TWO_CONS = 2;
+  
+  /**
+   * An empty attribute.
+   */
+  @SuppressWarnings("unused")
+  private static final PersonalAttributeList EMPTY_ATTR_LIST =
+    new PersonalAttributeList(0);
+  
+  /**
+   * An attribute with a complex value (canonicalResidenceAddress).
+   */
+  private static PersonalAttribute complexAttrValue = null;
+  
+  /**
+   * Simple attribute value list string.
+   */
+  private static final String SIMPLE_ATTRLIST =
+    "isAgeOver:true:[15,]:Available;";
+  
+  /**
+   * Simple attribute value list string.
+   */
+  private static final String SIMPLE_ATTRLIST2 =
+    "isAgeOver:true:[18,]:Available;";
+  
+  /**
+   * Simple attribute value list string.
+   */
+  private static final String SIMPLE_ATTRLIST3 = 
+    "isAgeOver:true:[15,]:Available;isAgeOver:true:[18,]:Available;";
+  
+  /**
+   * Simple attribute value list string.
+   */
+  private static final String SIMPLE_ATTRLIST3_REVERSE = 
+    "isAgeOver:true:[18,]:Available;isAgeOver:true:[15,]:Available;";
+  /**
+   * Simple attribute value list string.
+   */
+  private static final String COMPLEX_ATTRLIST =
+    "canonicalResidenceAddress:true:[postalCode=4100,apartmentNumber=Ed. B,"
+    + "state=Porto,countryCodeAddress=PT,streetNumber=379,"
+    + "streetName=Avenida Sidonio Pais,town=Porto,]:Available;";
+  /**
+   * Mix attribute list string.
+   */
+  private static final String STR_MIX_ATTR_LIST =
+    "isAgeOver:true:[15,]:Available;canonicalResidenceAddress:true:["
+    + "postalCode=4100,apartmentNumber=Ed.B,state=Porto,countryCodeAddress=PT,"
+    + "streetNumber=379,streetName=Avenida Sidonio Pais,town=Porto,]:"
+    + "Available;";
+  
+  /**
+   * Mix attribute list 2 string.
+   */
+  private static final String STR_MIX_ATTR_LIST2 =
+    "isAgeOver:true:[15,]:Available;canonicalResidenceAddress:true:["
+    + "postalCode=4100,apartmentNumber=Ed.B,state=Porto,countryCodeAddress=PT,"
+    + "streetNumber=379,streetName=Avenida Sidonio Pais,town=Porto,]:Available;"
+    + "mandateContent:true:["
+    + "isJoint=\"isjoint\",typeOfPower=\"power\",ValidTo=\"validto\",validfrom=\"validfrom\",AQAA=\"3\",isChained=\"ischained\",]:"
+    + "Available;";
+  
+  /**
+   * Attribute List example.
+   */
+  @SuppressWarnings({ "serial" })
+  private static final PersonalAttribute ATTR_VALUE = new PersonalAttribute(
+    "age", true, new ArrayList<String>() {
+      {
+        add("15");
+      }
+    }, STORKStatusCode.STATUS_AVAILABLE.toString());
+  
+  /**
+   * Init PersonalAttributeListTestCase class.
+   */
+  @SuppressWarnings("serial")
+  @BeforeClass
+  public static void runsBeforeTheTestSuite() {
+    final Map<String, String> values = new HashMap<String, String>() {
+      {
+        put("countryCodeAddress", "PT");
+        put("state", "Porto");
+        put("town", "Porto");
+        put("postalCode", "4100");
+        put("streetName", "Avenida Sidonio Pais");
+        put("streetNumber", "379");
+        put("apartmentNumber", "Ed. B");
+      }
+    };
+    
+    complexAttrValue =
+      new PersonalAttribute("canonicalResidenceAddress", true, values,
+        STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+  }
+  
+  /**
+   * Testing Personal Attribute List add method. Personal Attribute list must be
+   * size 1 - Simple attribute.
+   */
+  @Test
+  public void testAddSimpleAttr() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.add(ATTR_VALUE);
+    Assert.assertTrue(attrList.size() == 1);
+  }
+  
+  /**
+   * Testing Personal Attribute List add method. Personal Attribute list must be
+   * size 1 - Complex attribute.
+   */
+  @Test
+  public void testAddCompleAttr() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.add(complexAttrValue);
+    Assert.assertTrue(attrList.size() == 1);
+  }
+  
+  /**
+   * Testing Personal Attribute List add method. Personal Attribute list must be
+   * size 0 - no attribute.
+   */
+  @Test
+  public void testAddNull() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.add(null);
+    Assert.assertTrue(attrList.size() == 0);
+  }
+  
+  /**
+   * Testing Personal Attribute List add method. Same attribute name added
+   * twice. Personal Attribute list must be size 2 - IsAgeOver attribute added
+   * twice.
+   */
+  @SuppressWarnings("serial")
+  @Test
+  public void testAddSameAttrName() {
+    final PersonalAttribute attrValueUnder =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("15");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+    final PersonalAttribute attrValueOver =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("18");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.add(attrValueUnder);
+    attrList.add(attrValueOver);
+    Assert.assertTrue(attrList.size() == 2);
+  }
+  
+  /**
+   * Testing Personal Attribute List add method. Same attribute name added
+   * twice. Personal Attribute list must be size 2 - IsAgeOver attribute added
+   * twice.
+   */
+  @SuppressWarnings("serial")
+  @Test
+  public void testAddSameAttrNameEmpty() {
+    final PersonalAttribute attrValueUnder =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("15");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+    final PersonalAttribute attrValueOver =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.add(attrValueUnder);
+    attrList.add(attrValueOver);
+    Assert.assertTrue(attrList.size() == 2);
+  }
+  
+  /**
+   * Testing Personal Attribute List put method. Personal Attribute list must be
+   * size 1 - Simple Value.
+   */
+  @Test
+  public void testPutSimpleAttr() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.put(ATTR_VALUE.getName(), ATTR_VALUE);
+    Assert.assertTrue(attrList.size() == 1);
+  }
+  
+  /**
+   * Testing Personal Attribute List put method. Personal Attribute list must be
+   * size 1 - Complex Value.
+   */
+  @Test
+  public void testPutComplexAttr() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.put(ATTR_VALUE.getName(), complexAttrValue);
+    Assert.assertTrue(attrList.size() == 1);
+  }
+  
+  /**
+   * Testing Personal Attribute List put method. Personal Attribute list must be
+   * size 0 - no attribute.
+   */
+  @Test
+  public void testPutNull() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.put("", null);
+    Assert.assertTrue(attrList.size() == 0);
+  }
+  
+  /**
+   * Testing Personal Attribute List put method. Personal Attribute list must be
+   * size 2 - IsAgeOver attribute added twice.
+   */
+  @SuppressWarnings("serial")
+  @Test
+  public void testPutSameAttrName() {
+    final PersonalAttribute attrValueUnder =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("15");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+    final PersonalAttribute attrValueOver =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("18");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.put(attrValueUnder.getName(), attrValueUnder);
+    attrList.put(attrValueOver.getName(), attrValueOver);
+    Assert.assertTrue(attrList.size() == 2);
+  }
+  
+  /**
+   * Testing Personal Attribute List put method. Personal Attribute list must be
+   * size 2 - IsAgeOver attribute added twice.
+   */
+  @SuppressWarnings("serial")
+  @Test
+  public void testPutSameAttrNameEmpty() {
+    final PersonalAttribute attrValueUnder =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("15");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+    final PersonalAttribute attrValueOver =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.put(attrValueUnder.getName(), attrValueUnder);
+    attrList.put(attrValueOver.getName(), attrValueOver);
+    Assert.assertTrue(attrList.size() == 2);
+  }
+  
+  /**
+   * Testing Personal Attribute List get method. Personal Attribute list must be
+   * size 1 - Simple attribute.
+   */
+  @Test
+  public void testGetSimpleAttr() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.add(ATTR_VALUE);
+    Assert.assertEquals(ATTR_VALUE, attrList.get(ATTR_VALUE.getName()));
+  }
+  
+  /**
+   * Testing Personal Attribute List add method. Personal Attribute list must be
+   * size 1 - Complex attribute.
+   */
+  @Test
+  public void testGetCompleAttr() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.add(complexAttrValue);
+    Assert.assertEquals(complexAttrValue.toString(),
+      attrList.get(complexAttrValue.getName()).toString());
+  }
+  
+  /**
+   * Testing Personal Attribute List get method. Personal Attribute list must be
+   * size 2 - IsAgeOver attribute.
+   */
+  @SuppressWarnings("serial")
+  @Test
+  public void testGetIsAgeOverAttr() {
+    final PersonalAttribute attrValueUnder =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("15");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+    final PersonalAttribute attrValueOver =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("18");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.add(attrValueUnder);
+    attrList.add(attrValueOver);
+    Assert.assertEquals(SIMPLE_ATTRLIST,
+      attrList.get(attrValueUnder.getName()).toString());
+    Assert.assertEquals(SIMPLE_ATTRLIST2,
+      attrList.get(attrValueOver.getName()).toString());
+  }
+  
+  /**
+   * Testing Personal Attribute List populate method. Personal Attribute list
+   * must be size 1 - Simple attribute.
+   */
+  @Test
+  public void testPopulateSimpleAttr() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.populate(SIMPLE_ATTRLIST);
+    Assert.assertTrue(attrList.size() == 1);
+  }
+  
+  /**
+   * Testing Personal Attribute List populate method. Personal Attribute list
+   * must be size 1 - Complex attribute.
+   */
+  @Test
+  public void testPopulateComplexAttr() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.populate(COMPLEX_ATTRLIST);
+    Assert.assertTrue(attrList.size() == 1);
+  }
+  
+  /**
+   * Testing Personal Attribute List populate method. Personal Attribute list
+   * must be size 1 - Simple and Complex attribute.
+   */
+  @Test
+  public void testPopulateMixAttrs() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.populate(STR_MIX_ATTR_LIST);
+    Assert.assertTrue(attrList.size() == 2);
+  }
+  
+  /**
+   * Testing Personal Attribute List toString method using add.
+   */
+  @SuppressWarnings("serial")
+  @Test
+  public void testToStringFromAdd() {
+    final PersonalAttribute attrValueUnder =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("15");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+    final PersonalAttribute attrValueOver =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("18");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.add(attrValueUnder);
+    attrList.add(attrValueOver);
+    Assert.assertEquals(SIMPLE_ATTRLIST3_REVERSE, attrList.toString());
+  }
+  
+  /**
+   * Testing Personal Attribute List toString method using put.
+   * 
+   */
+  @SuppressWarnings("serial")
+  @Test
+  public void testToStringFromPut() {
+    final PersonalAttribute attrValueUnder =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("15");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+    final PersonalAttribute attrValueOver =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("18");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.put(attrValueUnder.getName(), attrValueUnder);
+    attrList.put(attrValueOver.getName(), attrValueOver);
+    Assert.assertEquals(SIMPLE_ATTRLIST3_REVERSE, attrList.toString());
+  }
+  
+  /**
+   * Testing Personal Attribute List toString method using populate.
+   */
+  @Test
+  public void testToStringFromSimplePopulate() {
+    final String strAttrList = "isAgeOver:true";
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.populate(strAttrList);
+    Assert.assertEquals("isAgeOver:true:[]:;", attrList.toString());
+  }
+  
+  /**
+   * Testing Personal Attribute List toString method using populate.
+   */
+  @Test
+  public void testToStringFromPopulate() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.populate(SIMPLE_ATTRLIST3);
+    Assert.assertEquals(SIMPLE_ATTRLIST3_REVERSE, attrList.toString());
+  }
+  
+  /**
+   * Testing Personal Attribute List populate method, with invalid values.
+   */
+  @Test
+  public void testPopulateWithInvalidValuesFormat() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate("name:type:values:status;");
+    Assert.assertEquals(pal, new PersonalAttributeList());
+  }
+  
+  /**
+   * Testing Personal Attribute List populate method, with invalid format.
+   */
+  @Test
+  public void testPopulateWithInvalidFormat() {
+    
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate("name:type::status;");
+    Assert.assertEquals(pal, new PersonalAttributeList());
+  }
+  
+  /**
+   * Testing Personal Attribute List clone method using add.
+   */
+  @SuppressWarnings("serial")
+  @Test
+  public void testCloneFromAdd() {
+    final PersonalAttribute attrValueUnder =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("15");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+    final PersonalAttribute attrValueOver =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("18");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.add(attrValueUnder);
+    attrList.add(attrValueOver);
+    Assert.assertNotSame(attrList, attrList.clone());
+  }
+  
+  /**
+   * Testing Personal Attribute List clone method using put.
+   */
+  @SuppressWarnings("serial")
+  @Test
+  public void testCloneFromPut() {
+    final PersonalAttribute attrValueUnder =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("15");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+    final PersonalAttribute attrValueOver =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("18");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.put(attrValueUnder.getName(), attrValueUnder);
+    attrList.put(attrValueOver.getName(), attrValueOver);
+    Assert.assertNotSame(attrList, attrList.clone());
+  }
+  
+  /**
+   * Testing Personal Attribute List clone method using populate.
+   */
+  @Test
+  public void testCloneFromPopulate() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(SIMPLE_ATTRLIST3);
+    Assert.assertNotSame(pal, pal.clone());
+  }
+  
+  /**
+   * Testing Personal Attribute List iterator.
+   */
+  @Test
+  public void testIterator() {
+    final String strAttrList =
+      "isAgeOver:true:[15,]:Available;isAgeOver:true:[18,]:Available;";
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(strAttrList);
+    final Iterator<PersonalAttribute> itAttr = pal.iterator();
+    while (itAttr.hasNext()) {
+      final PersonalAttribute attr = itAttr.next();
+      Assert.assertEquals(ISAGEOVER_CONS, attr.getName());
+    }
+  }
+  
+  /**
+   * Testing Personal Attribute List's GetOptionalAttributes method with empty attribute list.
+   */
+  @Test
+  public void testGetOptionalAttributesWithEmptyList() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    Assert.assertTrue(pal.getOptionalAttributes().isEmpty());
+  }
+  
+  /**
+   * Testing Personal Attribute List's GetOptionalAttributes method without optional attributes.
+   */
+  @Test
+  public void testGetOptionalAttributesWithoutOptional() {
+    final String strAttrList =
+      "isAgeOver:true:[15,]:Available;isAgeOver:true:[18,]:Available;";
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(strAttrList);
+    Assert.assertTrue(pal.getOptionalAttributes().isEmpty());
+  }
+  
+  /**
+   * Testing Personal Attribute List's GetOptionalAttributes method with one optional attribute.
+   */
+  @Test
+  public void testGetOptionalAttributesWithOneOptional() {
+    final String strAttrList =
+      "age:false:[]:;isAgeOver:true:[15,]:;isAgeOver:true:[18,]:;";
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(strAttrList);
+    Assert.assertTrue(pal.getOptionalAttributes().size() == ONE_CONS);
+  }
+  
+  /**
+   * Testing Personal Attribute List's GetOptionalAttributes method with two optional attribute.
+   */
+  @Test
+  public void testGetOptionalAttributesWithOnlyOptional() {
+    final String strAttrList =
+      "age:false:[]:;isAgeOver:false:[18,]:;";
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(strAttrList);
+    Assert.assertTrue(pal.getOptionalAttributes().size() == TWO_CONS);
+  }
+  
+  /**
+   * Testing Personal Attribute List's getMandatoryAttributes method with empty attribute list.
+   */
+  @Test
+  public void testGetMandatoryAttributesWithEmptyList() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    Assert.assertTrue(pal.getMandatoryAttributes().isEmpty());
+  }
+  
+  /**
+   * Testing Personal Attribute List's getMandatoryAttributes method without mandatory attributes.
+   */
+  @Test
+  public void testGetMandatoryAttributesWithoutMandatory() {
+    final String strAttrList =
+      "isAgeOver:false:[15,]:Available;isAgeOver:false:[18,]:Available;";
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(strAttrList);
+    Assert.assertTrue(pal.getMandatoryAttributes().isEmpty());
+  }
+  
+  /**
+   * Testing Personal Attribute List's GetMandatoryAttributes method with one mandatory attribute.
+   */
+  @Test
+  public void testGetMandatoryAttributesWithOneMandatory() {
+    final String strAttrList =
+      "age:true:[]:;isAgeOver:false:[15,]:;isAgeOver:false:[18,]:;";
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(strAttrList);
+    Assert.assertTrue(pal.getMandatoryAttributes().size() == ONE_CONS);
+  }
+  
+  /**
+   * Testing Personal Attribute List's GetMandatoryAttributes method with two mandatory attribute.
+   */
+  @Test
+  public void testGetMandatoryAttributesWithOnlyMandatory() {
+    final String strAttrList =
+      "age:true:[]:;isAgeOver:true:[18,]:;";
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(strAttrList);
+    Assert.assertTrue(pal.getMandatoryAttributes().size() == TWO_CONS);
+  }
+  
+  /**
+   * Testing Personal Attribute List's getSimpleValueAttributes method with empty attribute list.
+   */
+  @Test
+  public void testGetSimpleValueAttributesWithEmptyList() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    Assert.assertTrue(pal.getSimpleValueAttributes().isEmpty());
+  }
+  
+  /**
+   * Testing Personal Attribute List's getSimpleValueAttributes() method without simple attributes.
+   */
+  @Test
+  public void testGetSimpleValueAttributesWithoutSimple() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(COMPLEX_ATTRLIST);
+    Assert.assertTrue(pal.getSimpleValueAttributes().isEmpty());
+  }
+  
+  /**
+   * Testing Personal Attribute List's getSimpleValueAttributes() method with one simple attribute.
+   */
+  @Test
+  public void testGetSimpleValueAttributesWithOneSimple() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(STR_MIX_ATTR_LIST);
+    Assert.assertTrue(pal.getSimpleValueAttributes().size() == ONE_CONS);
+  }
+  
+  /**
+   * Testing Personal Attribute List's GetMandatoryAttributes method with two simple attribute.
+   */
+  @Test
+  public void testGetSimpleValueAttributesWithOnlySimple() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(SIMPLE_ATTRLIST3);
+    Assert.assertTrue(pal.getSimpleValueAttributes().size() == TWO_CONS);
+  }
+  
+  /**
+   * Testing Personal Attribute List's getComplexValueAttributes method with empty attribute list.
+   */
+  @Test
+  public void testGetComplexAttributesWithEmptyList() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    Assert.assertTrue(pal.getComplexAttributes().isEmpty());
+  }
+  
+  /**
+   * Testing Personal Attribute List's getComplexAttributes() method without complex attributes.
+   */
+  @Test
+  public void testGetComplexAttributesWithoutSimple() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(SIMPLE_ATTRLIST2);
+    Assert.assertTrue(pal.getComplexAttributes().isEmpty());
+  }
+  
+  /**
+   * Testing Personal Attribute List's getComplexAttributes() method with one complex attribute.
+   */
+  @Test
+  public void testGetComplexAttributesWithOneComplex() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(STR_MIX_ATTR_LIST);
+    Assert.assertTrue(pal.getComplexAttributes().size() == ONE_CONS);
+  }
+  
+  /**
+   * Testing Personal Attribute List's GetMandatoryAttributes method with only two Complex attribute.
+   */
+  @Test
+  public void testGetComplexAttributesWithOnlyComplex() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(STR_MIX_ATTR_LIST2);
+    Assert.assertTrue(pal.getComplexAttributes().size() == TWO_CONS);
+  }
+
+}
diff --git a/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/PersonalAttributeTestCase.java b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/PersonalAttributeTestCase.java
new file mode 100644
index 000000000..458d510e0
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/PersonalAttributeTestCase.java
@@ -0,0 +1,182 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * 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 eu.stork.peps.tests;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+
+import junit.framework.Assert;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import eu.stork.peps.auth.commons.PersonalAttribute;
+import eu.stork.peps.auth.commons.STORKStatusCode;
+
+/**
+ * The PersonalAttribute's Test Case.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.4 $, $Date: 2010-11-17 05:17:03 $
+ */
+public final class PersonalAttributeTestCase {
+  
+  /**
+   * An empty attribute.
+   */
+  private static final PersonalAttribute EMPTYATTR = new PersonalAttribute();
+  
+  /**
+   * An attribute with a complex value (canonicalResidenceAddress).
+   */
+  private static PersonalAttribute complexAttrValue = null;
+  
+  /**
+   * An attribute with a simple value (age).
+   */
+  @SuppressWarnings("serial")
+  private static final PersonalAttribute ATTR_VALUE = new PersonalAttribute(
+    "age", true, new ArrayList<String>() {
+      {
+        add("15");
+      }
+    }, STORKStatusCode.STATUS_AVAILABLE.toString());
+  
+  /**
+   * Init PersonalAttributeTestCase class.
+   */
+  @SuppressWarnings("serial")
+  @BeforeClass
+  public static void runsBeforeTheTestSuite() {
+    final Map<String, String> values = new HashMap<String, String>() {
+      {
+        put("countryCodeAddress", "PT");
+        put("state", "Porto");
+        put("town", "Porto");
+        put("postalCode", "4100");
+        put("streetName", "Avenida Sidonio Pais");
+        put("streetNumber", "379");
+        put("apartmentNumber", "B");
+      }
+    };
+    
+    complexAttrValue =
+      new PersonalAttribute("canonicalResidenceAddress", true, values,
+        STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+  }
+  
+  /**
+   * Tests the {@link PersonalAttribute#toString()} method for the given simple
+   * attribute value. Values must match.
+   */
+  @Test
+  public void testToStringValues() {
+    Assert.assertEquals("age:true:[15,]:Available;", ATTR_VALUE.toString());
+  }
+  
+  /**
+   * Tests the {@link PersonalAttribute#toString()} method for the given complex
+   * attribute value. Values must match.
+   */
+  @Test
+  public void testToStringComplexValues() {
+    Assert.assertEquals(
+      "canonicalResidenceAddress:true:[postalCode=4100,apartmentNumber=B,"
+        + "state=Porto,countryCodeAddress=PT,streetNumber=379,"
+        + "streetName=Avenida Sidonio Pais,town=Porto,]:Available;",
+      complexAttrValue.toString());
+  }
+  
+  /**
+   * Tests the {@link PersonalAttribute#isEmptyStatus()} method for the given
+   * empty attribute. Must return true.
+   */
+  @Test
+  public void testToIsEmptyStatusWithNull() {
+    Assert.assertTrue(EMPTYATTR.isEmptyStatus());
+  }
+  
+  /**
+   * Tests the {@link PersonalAttribute#isEmptyStatus()} method for the given
+   * new attribute. Must return true.
+   */
+  @Test
+  public void testToIsEmptyStatusWithEmptyString() {
+    final PersonalAttribute attr = (PersonalAttribute) EMPTYATTR.clone();
+    attr.setStatus("");
+    Assert.assertTrue(attr.isEmptyStatus());
+  }
+  
+  /**
+   * Tests the {@link PersonalAttribute#isEmptyValue()} method for the given
+   * empty attribute. Must return true.
+   */
+  @Test
+  public void testToIsEmptyValueWithNull() {
+    final PersonalAttribute attr = (PersonalAttribute) EMPTYATTR.clone();
+    attr.setValue(null);
+    Assert.assertTrue(attr.isEmptyValue());
+  }
+  
+  /**
+   * Tests the {@link PersonalAttribute#isEmptyValue()} method for the given
+   * empty attribute. Must return true.
+   */
+  @Test
+  public void testToIsEmptyValue() {
+    Assert.assertTrue(EMPTYATTR.isEmptyValue());
+  }
+  
+  /**
+   * Tests the {@link PersonalAttribute#isEmptyComplexValue()} method for the
+   * given empty attribute. Must return true.
+   */
+  @Test
+  public void testToIsEmptyComplexValueWithNull() {
+    final PersonalAttribute attr = (PersonalAttribute) EMPTYATTR.clone();
+    attr.setComplexValue(null);
+    Assert.assertTrue(attr.isEmptyComplexValue());
+  }
+  
+  /**
+   * Tests the {@link PersonalAttribute#isEmptyComplexValue()} method for the
+   * given empty attribute. Must return true.
+   */
+  @Test
+  public void testToIsEmptyComplexValueWithEmptyComplexValue() {
+    Assert.assertTrue(EMPTYATTR.isEmptyComplexValue());
+  }
+  
+  /**
+   * Tests the {@link PersonalAttribute#clone()} method for the given attribute.
+   * Must return true.
+   */
+  @Test
+  public void testCloneToComplexValue() {
+    Assert.assertNotSame(complexAttrValue, complexAttrValue.clone());
+  }
+  
+  /**
+   * Tests the {@link PersonalAttribute#clone()} method for the given attribute.
+   * Must return true.
+   */
+  @Test
+  public void testCloneToValue() {
+    Assert.assertNotSame(ATTR_VALUE, ATTR_VALUE.clone());
+  }
+}
diff --git a/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/package-info.java b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/package-info.java
new file mode 100644
index 000000000..452602210
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/package-info.java
@@ -0,0 +1,5 @@
+/**
+ * This package provides all JUnit test classes.
+ */
+package eu.stork.peps.tests;
+
-- 
cgit v1.2.3