Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'jetty-security/src/test/java/org/eclipse/jetty/security/PropertyUserStoreTest.java')
-rw-r--r--jetty-security/src/test/java/org/eclipse/jetty/security/PropertyUserStoreTest.java210
1 files changed, 104 insertions, 106 deletions
diff --git a/jetty-security/src/test/java/org/eclipse/jetty/security/PropertyUserStoreTest.java b/jetty-security/src/test/java/org/eclipse/jetty/security/PropertyUserStoreTest.java
index fc1a2f3f8a..2ae011f305 100644
--- a/jetty-security/src/test/java/org/eclipse/jetty/security/PropertyUserStoreTest.java
+++ b/jetty-security/src/test/java/org/eclipse/jetty/security/PropertyUserStoreTest.java
@@ -18,178 +18,176 @@
package org.eclipse.jetty.security;
+import static org.hamcrest.Matchers.*;
+import static org.junit.Assert.*;
+import static org.junit.Assume.*;
+
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
+import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
+import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
+import org.eclipse.jetty.toolchain.test.FS;
+import org.eclipse.jetty.toolchain.test.OS;
+import org.eclipse.jetty.toolchain.test.TestingDir;
import org.eclipse.jetty.util.security.Credential;
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
+import org.hamcrest.Matcher;
+import org.junit.Rule;
import org.junit.Test;
public class PropertyUserStoreTest
{
- String testFileDir = "target" + File.separator + "property-user-store-test";
- String testFile = testFileDir + File.separator + "users.txt";
-
- @Before
- public void before() throws Exception
+ private final class UserCount implements PropertyUserStore.UserListener
{
- File file = new File(testFileDir);
- file.mkdirs();
+ private final AtomicInteger userCount = new AtomicInteger();
+ private final List<String> users = new ArrayList<String>();
- writeInitialUsers(testFile);
- }
+ private UserCount()
+ {
+ }
- @After
- public void after() throws Exception
- {
- File file = new File(testFile);
+ public void update(String username, Credential credential, String[] roleArray)
+ {
+ if (!users.contains(username))
+ {
+ users.add(username);
+ userCount.getAndIncrement();
+ }
+ }
- file.delete();
+ public void remove(String username)
+ {
+ users.remove(username);
+ userCount.getAndDecrement();
+ }
+
+ public void awaitCount(int expectedCount) throws InterruptedException
+ {
+ long timeout = System.currentTimeMillis() + TimeUnit.SECONDS.toMillis(10);
+
+ while (userCount.get() != expectedCount && (System.currentTimeMillis() < timeout))
+ {
+ TimeUnit.MILLISECONDS.sleep(100);
+ }
+
+ assertThatCount(is(expectedCount));
+ }
+
+ public void assertThatCount(Matcher<Integer> matcher)
+ {
+ assertThat("User count",userCount.get(),matcher);
+ }
+
+ public void assertThatUsers(Matcher<Iterable<? super String>> matcher)
+ {
+ assertThat("Users list",users,matcher);
+ }
}
- private void writeInitialUsers(String testFile) throws Exception
+ @Rule
+ public TestingDir testdir = new TestingDir();
+
+ private File initUsersText() throws Exception
{
- try (Writer writer = new BufferedWriter(new FileWriter(testFile)))
+ Path dir = testdir.getDir().toPath().toRealPath();
+ FS.ensureDirExists(dir.toFile());
+ File users = dir.resolve("users.txt").toFile();
+
+ try (Writer writer = new BufferedWriter(new FileWriter(users)))
{
writer.append("tom: tom, roleA\n");
writer.append("dick: dick, roleB\n");
writer.append("harry: harry, roleA, roleB\n");
}
+
+ return users;
}
- private void writeAdditionalUser(String testFile) throws Exception
+ private void addAdditionalUser(File usersFile, String userRef) throws Exception
{
Thread.sleep(1001);
- try (Writer writer = new BufferedWriter(new FileWriter(testFile,true)))
+ try (Writer writer = new BufferedWriter(new FileWriter(usersFile,true)))
{
- writer.append("skip: skip, roleA\n");
+ writer.append(userRef);
}
}
@Test
public void testPropertyUserStoreLoad() throws Exception
{
- final AtomicInteger userCount = new AtomicInteger();
+ final UserCount userCount = new UserCount();
+ final File usersFile = initUsersText();
PropertyUserStore store = new PropertyUserStore();
+ store.setConfigPath(usersFile);
- store.setConfig(testFile);
-
- store.registerUserListener(new PropertyUserStore.UserListener()
- {
-
- public void update(String username, Credential credential, String[] roleArray)
- {
- userCount.getAndIncrement();
- }
-
- public void remove(String username)
- {
-
- }
- });
+ store.registerUserListener(userCount);
store.start();
- Assert.assertNotNull("Failed to retrieve UserIdentity directly from PropertyUserStore", store.getUserIdentity("tom"));
- Assert.assertNotNull("Failed to retrieve UserIdentity directly from PropertyUserStore", store.getUserIdentity("dick"));
- Assert.assertNotNull("Failed to retrieve UserIdentity directly from PropertyUserStore", store.getUserIdentity("harry"));
- Assert.assertEquals(3,userCount.get());
+ assertThat("Failed to retrieve UserIdentity directly from PropertyUserStore", store.getUserIdentity("tom"), notNullValue());
+ assertThat("Failed to retrieve UserIdentity directly from PropertyUserStore", store.getUserIdentity("dick"), notNullValue());
+ assertThat("Failed to retrieve UserIdentity directly from PropertyUserStore", store.getUserIdentity("harry"), notNullValue());
+ userCount.assertThatCount(is(3));
+ userCount.awaitCount(3);
}
@Test
public void testPropertyUserStoreLoadUpdateUser() throws Exception
{
-
- final AtomicInteger userCount = new AtomicInteger();
-
- final List<String> users = new ArrayList<String>();
+ assumeThat("Skipping on OSX", OS.IS_OSX, is(false));
+ final UserCount userCount = new UserCount();
+ final File usersFile = initUsersText();
PropertyUserStore store = new PropertyUserStore();
- store.setRefreshInterval(1);
- store.setConfig(testFile);
-
- store.registerUserListener(new PropertyUserStore.UserListener()
- {
- public void update(String username, Credential credential, String[] roleArray)
- {
- if (!users.contains(username))
- {
- users.add(username);
- userCount.getAndIncrement();
- }
- }
-
- public void remove(String username)
- {
+ store.setHotReload(true);
+ store.setConfigPath(usersFile);
- }
- });
+ store.registerUserListener(userCount);
store.start();
- Assert.assertEquals(3,userCount.get());
-
- writeAdditionalUser(testFile);
+
+ userCount.assertThatCount(is(3));
- long start = System.currentTimeMillis();
- while (userCount.get() < 4 && (System.currentTimeMillis() - start) < 10000)
- {
- Thread.sleep(10);
- }
+ addAdditionalUser(usersFile,"skip: skip, roleA\n");
- Assert.assertNotNull("Failed to retrieve UserIdentity from PropertyUserStore directly", store.getUserIdentity("skip"));
- Assert.assertEquals(4,userCount.get());
+ userCount.awaitCount(4);
- Assert.assertTrue(users.contains("skip"));
+ assertThat("Failed to retrieve UserIdentity from PropertyUserStore directly", store.getUserIdentity("skip"), notNullValue());
+
+ userCount.assertThatCount(is(4));
+ userCount.assertThatUsers(hasItem("skip"));
}
@Test
public void testPropertyUserStoreLoadRemoveUser() throws Exception
{
- writeAdditionalUser(testFile);
-
- final AtomicInteger userCount = new AtomicInteger();
-
- final List<String> users = new ArrayList<String>();
+ assumeThat("Skipping on OSX", OS.IS_OSX, is(false));
+ final UserCount userCount = new UserCount();
+ // initial user file (3) users
+ final File usersFile = initUsersText();
+
+ // adding 4th user
+ addAdditionalUser(usersFile,"skip: skip, roleA\n");
PropertyUserStore store = new PropertyUserStore();
- store.setRefreshInterval(2);
- store.setConfig(testFile);
-
- store.registerUserListener(new PropertyUserStore.UserListener()
- {
+ store.setHotReload(true);
+ store.setConfigPath(usersFile);
- public void update(String username, Credential credential, String[] roleArray)
- {
- if (!users.contains(username))
- {
- users.add(username);
- userCount.getAndIncrement();
- }
- }
-
- public void remove(String username)
- {
- users.remove(username);
- userCount.getAndDecrement();
- }
- });
+ store.registerUserListener(userCount);
store.start();
- Assert.assertEquals(4,userCount.get());
+ userCount.assertThatCount(is(4));
- Thread.sleep(2000);
- writeInitialUsers(testFile);
- Thread.sleep(3000);
- Assert.assertEquals(3,userCount.get());
+ // rewrite file with original 3 users
+ initUsersText();
+
+ userCount.awaitCount(3);
}
-
}

Back to the top