feat(redis): rework configuration to support multiple data sources

This commit is contained in:
aro 2023-03-13 19:32:15 +01:00
parent e00875faa2
commit 46aa3225d3
11 changed files with 103 additions and 94 deletions

View file

@ -1,36 +1,40 @@
package net.artelnatif.nicko.config; package net.artelnatif.nicko.config;
import com.fasterxml.jackson.annotation.JsonProperty;
public class Configuration { public class Configuration {
private final String address; @JsonProperty("sql")
private final String username; private final DataSourceConfiguration sqlConfiguration;
private final String password; @JsonProperty("redis")
private final DataSourceConfiguration redisConfiguration;
private final String prefix; private final String prefix;
private final Boolean local; private final Boolean local;
private final Boolean customLocale; private final Boolean customLocale;
public Configuration(String address, String username, String password, String prefix, Boolean local, Boolean customLocale) { public Configuration(DataSourceConfiguration sqlConfiguration, DataSourceConfiguration redisConfiguration, String prefix, Boolean local, Boolean customLocale) {
this.address = address; this.sqlConfiguration = sqlConfiguration;
this.username = username; this.redisConfiguration = redisConfiguration;
this.password = password;
this.prefix = prefix; this.prefix = prefix;
this.local = local; this.local = local;
this.customLocale = customLocale; this.customLocale = customLocale;
} }
public Configuration() { public Configuration() {
this("", "", "", "", false, false); this(
new DataSourceConfiguration("", 3306, "", ""),
new DataSourceConfiguration("", 6379, "", ""),
"",
false,
false
);
} }
public String getAddress() { public DataSourceConfiguration getSqlConfiguration() {
return address; return sqlConfiguration;
} }
public String getUsername() { public DataSourceConfiguration getRedisConfiguration() {
return username; return redisConfiguration;
}
public String getPassword() {
return password;
} }
public String getPrefix() { public String getPrefix() {

View file

@ -1,5 +1,6 @@
package net.artelnatif.nicko.config; package net.artelnatif.nicko.config;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
@ -15,6 +16,7 @@ public class ConfigurationManager {
public ConfigurationManager(File directory) { public ConfigurationManager(File directory) {
this.file = new File(directory, "config.yml"); this.file = new File(directory, "config.yml");
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
} }
public void save(Configuration configuration) throws IOException { public void save(Configuration configuration) throws IOException {

View file

@ -1,12 +1,15 @@
package net.artelnatif.nicko.config; package net.artelnatif.nicko.config;
public class DataSourceConfiguration { public class DataSourceConfiguration {
public static final DataSourceConfiguration SQL_EMPTY = new DataSourceConfiguration("127.0.0.1", 3306, "root", "");
public static final DataSourceConfiguration REDIS_EMPTY = new DataSourceConfiguration("127.0.0.1", 6379, "", "");
private final String address; private final String address;
private final String port; private final Integer port;
private final String username; private final String username;
private final String password; private final String password;
public DataSourceConfiguration(String address, String port, String username, String password) { public DataSourceConfiguration(String address, Integer port, String username, String password) {
this.address = address; this.address = address;
this.port = port; this.port = port;
this.username = username; this.username = username;
@ -17,7 +20,7 @@ public class DataSourceConfiguration {
return address; return address;
} }
public String getPort() { public Integer getPort() {
return port; return port;
} }

View file

@ -1,47 +0,0 @@
package net.artelnatif.nicko.config;
public class NewConfiguration {
private final DataSourceConfiguration sqlConfiguration;
private final DataSourceConfiguration redisConfiguration;
private final String prefix;
private final Boolean local;
private final Boolean customLocale;
public NewConfiguration(DataSourceConfiguration sqlConfiguration, DataSourceConfiguration redisConfiguration, String prefix, Boolean local, Boolean customLocale) {
this.sqlConfiguration = sqlConfiguration;
this.redisConfiguration = redisConfiguration;
this.prefix = prefix;
this.local = local;
this.customLocale = customLocale;
}
public NewConfiguration() {
this(
new DataSourceConfiguration("", "", "", ""),
new DataSourceConfiguration("", "", "", ""),
"",
false,
false
);
}
public DataSourceConfiguration getSqlConfiguration() {
return sqlConfiguration;
}
public DataSourceConfiguration getRedisConfiguration() {
return redisConfiguration;
}
public String getPrefix() {
return prefix;
}
public Boolean isLocal() {
return local;
}
public Boolean isCustomLocale() {
return customLocale;
}
}

View file

@ -1,6 +1,7 @@
package net.artelnatif.nicko.storage.sql; package net.artelnatif.nicko.storage.sql;
import net.artelnatif.nicko.config.Configuration; import net.artelnatif.nicko.config.Configuration;
import net.artelnatif.nicko.config.DataSourceConfiguration;
import net.artelnatif.nicko.storage.StorageProvider; import net.artelnatif.nicko.storage.StorageProvider;
import org.mariadb.jdbc.MariaDbDataSource; import org.mariadb.jdbc.MariaDbDataSource;
@ -25,9 +26,10 @@ public class SQLStorageProvider implements StorageProvider {
public boolean init() { public boolean init() {
try { try {
final MariaDbDataSource dataSource = new MariaDbDataSource(); final MariaDbDataSource dataSource = new MariaDbDataSource();
dataSource.setUrl("jdbc:mariadb://" + configuration.getAddress()); final DataSourceConfiguration dataSourceConfiguration = configuration.getSqlConfiguration();
dataSource.setUser(configuration.getUsername()); dataSource.setUrl("jdbc:mariadb://" + dataSourceConfiguration.getAddress() + ":" + dataSourceConfiguration.getPort());
dataSource.setPassword(configuration.getPassword()); dataSource.setUser(dataSourceConfiguration.getUsername());
dataSource.setPassword(dataSourceConfiguration.getPassword());
connection = dataSource.getConnection(); connection = dataSource.getConnection();
final boolean initialized = connection != null && !connection.isClosed(); final boolean initialized = connection != null && !connection.isClosed();

View file

@ -9,18 +9,20 @@
# Accepted values: false (Disabled), true (Enabled) # Accepted values: false (Disabled), true (Enabled)
local: true local: true
# SQL database's address # This configuration section manages SQL.
# Accepted values: valid IP address (e.g. localhost, 127.0.0.1) sql:
address: "localhost" # SQL database's address
# SQL database's port # Accepted values: valid IP address (e.g. localhost, 127.0.0.1)
# Accepted values: valid integer (e.g. 3306, 25565) address: "localhost"
port: 3306 # SQL database's port
# SQL database's username. # Accepted values: valid integer (e.g. 3306, 25565)
# Accepted values: any string port: 3306
username: "username" # SQL database's username.
# SQL database's password. # Accepted values: any string
# Accepted values: any string username: "username"
password: "password" # SQL database's password.
# Accepted values: any string
password: "password"
# This configuration section manages Redis (BungeeCord support). # This configuration section manages Redis (BungeeCord support).
# It is used to transfer data between multiple servers. # It is used to transfer data between multiple servers.

View file

@ -3,6 +3,7 @@ package net.artelnatif.nicko.test;
import be.seeseemelk.mockbukkit.MockBukkit; import be.seeseemelk.mockbukkit.MockBukkit;
import net.artelnatif.nicko.NickoBukkit; import net.artelnatif.nicko.NickoBukkit;
import net.artelnatif.nicko.config.Configuration; import net.artelnatif.nicko.config.Configuration;
import net.artelnatif.nicko.config.DataSourceConfiguration;
import org.junit.jupiter.api.*; import org.junit.jupiter.api.*;
public class NickoPluginTest { public class NickoPluginTest {
@ -11,9 +12,8 @@ public class NickoPluginTest {
@BeforeAll @BeforeAll
public static void setup() { public static void setup() {
final Configuration config = new Configuration( final Configuration config = new Configuration(
"", DataSourceConfiguration.SQL_EMPTY,
"", DataSourceConfiguration.REDIS_EMPTY,
"",
"", "",
true, true,
false); false);

View file

@ -5,8 +5,12 @@ import be.seeseemelk.mockbukkit.ServerMock;
import be.seeseemelk.mockbukkit.entity.PlayerMock; import be.seeseemelk.mockbukkit.entity.PlayerMock;
import net.artelnatif.nicko.NickoBukkit; import net.artelnatif.nicko.NickoBukkit;
import net.artelnatif.nicko.config.Configuration; import net.artelnatif.nicko.config.Configuration;
import net.artelnatif.nicko.config.DataSourceConfiguration;
import net.artelnatif.nicko.disguise.NickoProfile; import net.artelnatif.nicko.disguise.NickoProfile;
import org.junit.jupiter.api.*; import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import java.util.Optional; import java.util.Optional;
@ -20,9 +24,8 @@ public class CacheStorageTest {
@BeforeAll @BeforeAll
public static void setup() { public static void setup() {
final Configuration config = new Configuration( final Configuration config = new Configuration(
"127.0.0.1", new DataSourceConfiguration("127.0.0.1", 3306, "root", "12345"),
"root", DataSourceConfiguration.REDIS_EMPTY,
"12345",
"", "",
false, false,
false); false);

View file

@ -0,0 +1,40 @@
package net.artelnatif.nicko.test.config;
import be.seeseemelk.mockbukkit.MockBukkit;
import net.artelnatif.nicko.NickoBukkit;
import net.artelnatif.nicko.config.Configuration;
import net.artelnatif.nicko.config.DataSourceConfiguration;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class ConfigurationTest {
private static NickoBukkit plugin;
@BeforeAll
public static void setup() {
final Configuration config = new Configuration(
DataSourceConfiguration.SQL_EMPTY,
DataSourceConfiguration.REDIS_EMPTY,
"",
true,
false);
MockBukkit.mock();
plugin = MockBukkit.load(NickoBukkit.class, config);
}
@Test
@DisplayName("Read configuration")
public void readConfiguration() {
final Configuration configuration = plugin.getNickoConfig();
assertTrue(configuration.isLocal());
}
@AfterAll
public static void shutdown() {
MockBukkit.unmock();
}
}

View file

@ -5,6 +5,7 @@ import be.seeseemelk.mockbukkit.ServerMock;
import be.seeseemelk.mockbukkit.entity.PlayerMock; import be.seeseemelk.mockbukkit.entity.PlayerMock;
import net.artelnatif.nicko.NickoBukkit; import net.artelnatif.nicko.NickoBukkit;
import net.artelnatif.nicko.config.Configuration; import net.artelnatif.nicko.config.Configuration;
import net.artelnatif.nicko.config.DataSourceConfiguration;
import net.artelnatif.nicko.disguise.ActionResult; import net.artelnatif.nicko.disguise.ActionResult;
import net.artelnatif.nicko.disguise.NickoProfile; import net.artelnatif.nicko.disguise.NickoProfile;
import org.junit.jupiter.api.*; import org.junit.jupiter.api.*;
@ -22,9 +23,8 @@ public class BrokenSQLTest {
@BeforeAll @BeforeAll
public static void setup() { public static void setup() {
final Configuration config = new Configuration( final Configuration config = new Configuration(
"127.0.0.1", DataSourceConfiguration.SQL_EMPTY,
"root", DataSourceConfiguration.REDIS_EMPTY,
"INVALID_PASSWORD",
"", "",
false, false,
false); false);

View file

@ -4,6 +4,7 @@ import be.seeseemelk.mockbukkit.MockBukkit;
import be.seeseemelk.mockbukkit.ServerMock; import be.seeseemelk.mockbukkit.ServerMock;
import be.seeseemelk.mockbukkit.entity.PlayerMock; import be.seeseemelk.mockbukkit.entity.PlayerMock;
import net.artelnatif.nicko.NickoBukkit; import net.artelnatif.nicko.NickoBukkit;
import net.artelnatif.nicko.config.DataSourceConfiguration;
import net.artelnatif.nicko.i18n.Locale; import net.artelnatif.nicko.i18n.Locale;
import net.artelnatif.nicko.config.Configuration; import net.artelnatif.nicko.config.Configuration;
import net.artelnatif.nicko.disguise.ActionResult; import net.artelnatif.nicko.disguise.ActionResult;
@ -24,9 +25,8 @@ public class SQLStorageTest {
@BeforeAll @BeforeAll
public static void setup() { public static void setup() {
final Configuration config = new Configuration( final Configuration config = new Configuration(
"127.0.0.1", new DataSourceConfiguration("127.0.0.1", 3306, "root", "12345"),
"root", DataSourceConfiguration.REDIS_EMPTY,
"12345",
"", "",
false, false,
false); false);