001package io.ebean.test.config.provider;
002
003import io.ebean.config.CurrentTenantProvider;
004import io.ebean.config.CurrentUserProvider;
005import io.ebean.config.DatabaseConfig;
006import io.ebean.config.EncryptKeyManager;
007import org.slf4j.Logger;
008import org.slf4j.LoggerFactory;
009
010import java.util.Properties;
011
012/**
013 * Auto configuration of User and Tenant providers and Encrypt key manager for testing purposes.
014 */
015public class ProviderAutoConfig {
016
017  private static final Logger log = LoggerFactory.getLogger("io.ebean.test");
018
019  private final DatabaseConfig config;
020  private final Properties properties;
021
022  public ProviderAutoConfig(DatabaseConfig config) {
023    this.config = config;
024    this.properties = config.getProperties();
025  }
026
027  public void run() {
028
029    int providerSetFlag = 0;
030
031    CurrentUserProvider provider = config.getCurrentUserProvider();
032    if (provider == null) {
033      providerSetFlag = 1;
034      config.setCurrentUserProvider(new WhoUserProvider());
035    }
036
037    CurrentTenantProvider tenantProvider = config.getCurrentTenantProvider();
038    if (tenantProvider == null) {
039      providerSetFlag += 2;
040      config.setCurrentTenantProvider(new WhoTenantProvider());
041    }
042
043    EncryptKeyManager keyManager = config.getEncryptKeyManager();
044    if (keyManager == null) {
045      // Must be 16 Chars for Oracle function
046      String keyVal = properties.getProperty("ebean.test.encryptKey", "simple0123456789");
047      log.debug("for testing - using FixedEncryptKeyManager() keyVal:{}", keyVal);
048      config.setEncryptKeyManager(new FixedEncryptKeyManager(keyVal));
049    }
050
051    if (providerSetFlag > 0) {
052      log.info(msg(providerSetFlag));
053    }
054  }
055
056  String msg(int providerSetFlag) {
057    String msg = msgProvider(providerSetFlag);
058    String usage = msgUsage(providerSetFlag);
059    return "For testing purposes " + msg + " has been configured. Use io.ebean.test.UserContext to " + usage + " in tests.";
060  }
061
062  private String msgProvider(int providerSetFlag) {
063    switch (providerSetFlag) {
064      case 1:
065        return "a current user provider";
066      case 2:
067        return "a current tenant provider";
068      case 3:
069        return "a current user and tenant provider";
070    }
071    return "[unexpected??]";
072  }
073
074  private String msgUsage(int providerSetFlag) {
075    switch (providerSetFlag) {
076      case 1:
077        return "set current user";
078      case 2:
079        return "set current tenant";
080      case 3:
081        return "set current user and tenant";
082    }
083    return "[unexpected??]";
084  }
085}