package jenkins.security; import hudson.Util; import java.io.Closeable; import java.io.File; import java.io.IOException; import java.util.Random; public class ConfidentialStoreOverride implements Closeable { private static final File TEMP_FOLDER; private static final ConfidentialStore TEST_CONFIDENTIAL_STORE; private static final ThreadLocal<ConfidentialStore> TEST_THREAD_LOCAL; private static final Random TEST_RANDOM_SOURCE = new Random(4 /* chosen by fair dice roll */); static { try { TEMP_FOLDER = new File(Util.createTempDir(), "jenkins"); TEST_CONFIDENTIAL_STORE = new DefaultConfidentialStore(TEMP_FOLDER) { public byte[] randomBytes(final int size) { byte[] random = new byte[size]; TEST_RANDOM_SOURCE.nextBytes(random); return random; } }; TEST_THREAD_LOCAL = new ThreadLocal<ConfidentialStore>(){ protected ConfidentialStore initialValue() { return TEST_CONFIDENTIAL_STORE; } }; } catch (final IOException e) { throw new Error(e); } catch (final InterruptedException e) { throw new Error(e); } } public static void set(final ThreadLocal<ConfidentialStore> override) { ConfidentialStore.TEST = override; } public ConfidentialStoreOverride() { this(TEST_THREAD_LOCAL); } public ConfidentialStoreOverride(final ThreadLocal<ConfidentialStore> override) { set(override); } public void close() throws IOException { set(null); } }