From 96f918e0bc860e6d1fa978ceb657379da1d546e3 Mon Sep 17 00:00:00 2001
From: flippi321 <90700334+flippi321@users.noreply.github.com>
Date: Tue, 8 Mar 2022 10:12:49 +0100
Subject: [PATCH] Fixed Password Tests

---
 src/main/java/dao/UserDAO.java            |  5 +--
 src/main/java/resources/UserResource.java |  3 +-
 src/test/java/UserDAOTest.java            | 49 +++++++++++++++++++----
 src/test/java/UserResourceTest.java       |  4 +-
 4 files changed, 49 insertions(+), 12 deletions(-)

diff --git a/src/main/java/dao/UserDAO.java b/src/main/java/dao/UserDAO.java
index 42f0b37..2d9134a 100644
--- a/src/main/java/dao/UserDAO.java
+++ b/src/main/java/dao/UserDAO.java
@@ -1,7 +1,6 @@
 package dao;
 
 import data.User;
-import sun.security.provider.SHA;
 
 import java.nio.charset.StandardCharsets;
 import java.security.MessageDigest;
@@ -124,7 +123,7 @@ public class UserDAO {
      * @param user User object
      * @return new User or already registered user
      */
-    public User addUser(User user) {
+    public User addUser(User user) throws NoSuchAlgorithmException {
         Connection connection = null;
         PreparedStatement preparedStatement = null;
         ResultSet resultSet = null;
@@ -218,7 +217,7 @@ public class UserDAO {
      * @param password password as String, if null it should not be updated
      * @return true if success on new username, false if not
      */
-    public boolean editUser (int userId, String username, String password) {
+    public boolean editUser (int userId, String username, String password) throws NoSuchAlgorithmException {
         Connection connection = null;
         PreparedStatement preparedStatement = null;
         boolean updatePassword = false;
diff --git a/src/main/java/resources/UserResource.java b/src/main/java/resources/UserResource.java
index e406fae..e6601de 100644
--- a/src/main/java/resources/UserResource.java
+++ b/src/main/java/resources/UserResource.java
@@ -5,6 +5,7 @@ import data.User;
 
 import javax.ws.rs.*;
 import javax.ws.rs.core.MediaType;
+import java.security.NoSuchAlgorithmException;
 import java.time.LocalDateTime;
 import java.util.Date;
 import java.util.List;
@@ -35,7 +36,7 @@ public class UserResource {
     @POST
     @Consumes(MediaType.APPLICATION_JSON)
     @Produces(MediaType.APPLICATION_JSON)
-    public User newUser(User user){
+    public User newUser(User user) throws NoSuchAlgorithmException {
         UserDAO userDAO = new UserDAO();
         return userDAO.addUser(user);
     }
diff --git a/src/test/java/UserDAOTest.java b/src/test/java/UserDAOTest.java
index 6cdadd1..a540ca1 100644
--- a/src/test/java/UserDAOTest.java
+++ b/src/test/java/UserDAOTest.java
@@ -9,6 +9,7 @@ import org.junit.Before;
 import org.junit.Test;
 
 import javax.ws.rs.core.Application;
+import java.security.NoSuchAlgorithmException;
 import java.sql.Connection;
 import java.sql.SQLException;
 import java.sql.Statement;
@@ -170,7 +171,7 @@ public class UserDAOTest extends JerseyTest {
     }
 
     @Test
-    public void testUpdateUser () {
+    public void testUpdateUser () throws NoSuchAlgorithmException {
         assertTrue(userDAO.editUser(1,"newuser",null));
         List<User> userlist = userDAO.getUsers();
         assertEquals(userlist.get(0).getUsername(),"newuser");
@@ -178,7 +179,7 @@ public class UserDAOTest extends JerseyTest {
 
 
     @Test
-    public void testAddUser () {
+    public void testAddUser () throws NoSuchAlgorithmException {
         List<User> beforeNewUser = userDAO.getUsers();
         User user = new User(3,"username3", "password",userDAO.generateSalt());
         userDAO.addUser(user);
@@ -196,10 +197,44 @@ public class UserDAOTest extends JerseyTest {
     }
 
     @Test
-    public void generateSalt () {
-        List<User> userlist = userDAO.getUsers();
-        assertEquals(userlist.get(0).getUserId(),1);
-        assertEquals(userlist.get(0).getUsername(),"username1");
-        assertEquals(2,userDAO.getUsers().size());
+    public void generatesUniqueSalt () {
+        UserDAO user= new UserDAO();
+        assertNotEquals(user.generateSalt(),user.generateSalt());
+    }
+
+    @Test
+    public void sameSaltAndPassword () throws NoSuchAlgorithmException {
+        UserDAO user = new UserDAO();
+        String password = "Password123";
+        byte[] salt = user.generateSalt();
+        assertEquals(user.hashPassword(password,salt),user.hashPassword(password,salt));
+    }
+
+    @Test
+    public void sameSaltDifferentPassword () throws NoSuchAlgorithmException {
+        UserDAO user = new UserDAO();
+        String password1 = "Password123";
+        String password2 = "ShrekIsLove";
+        byte[] salt = user.generateSalt();
+        assertNotEquals(user.hashPassword(password1,salt),user.hashPassword(password2,salt));
+    }
+
+    @Test
+    public void differentSaltSamePassword () throws NoSuchAlgorithmException {
+        UserDAO user = new UserDAO();
+        String password = "Password123";
+        byte[] salt1 = user.generateSalt();
+        byte[] salt2 = user.generateSalt();
+        assertNotEquals(user.hashPassword(password,salt1),user.hashPassword(password,salt2));
+    }
+
+    @Test
+    public void differentSaltAndPassword () throws NoSuchAlgorithmException {
+        UserDAO user = new UserDAO();
+        String password1 = "Password123";
+        String password2 = "ShrekIsLove";
+        byte[] salt1 = user.generateSalt();
+        byte[] salt2 = user.generateSalt();
+        assertNotEquals(user.hashPassword(password1,salt1),user.hashPassword(password2,salt2));
     }
 }
\ No newline at end of file
diff --git a/src/test/java/UserResourceTest.java b/src/test/java/UserResourceTest.java
index 2846b35..8f95cb6 100644
--- a/src/test/java/UserResourceTest.java
+++ b/src/test/java/UserResourceTest.java
@@ -11,6 +11,8 @@ import javax.ws.rs.core.Application;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
+import java.security.NoSuchAlgorithmException;
+
 import static org.junit.Assert.*;
 
 public class UserResourceTest extends JerseyTest {
@@ -27,7 +29,7 @@ public class UserResourceTest extends JerseyTest {
     }
 
     @Test
-    public void testNewUser(){
+    public void testNewUser() throws NoSuchAlgorithmException {
         Response output = target("/user").request().post(Entity.entity(user, MediaType.APPLICATION_JSON));
         assertEquals("Should return status 200",200,output.getStatus());
         assertEquals("application/json",output.getHeaderString("Content-type"));
-- 
GitLab