skeleton test framework
parent
bb274bd9ab
commit
da023c4cc4
22
pom.xml
22
pom.xml
|
@ -96,12 +96,6 @@
|
|||
<version>1.2.3</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>4.12</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<!-- Guava -->
|
||||
|
||||
|
@ -173,6 +167,22 @@
|
|||
<version>3.5.2</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Testing -->
|
||||
<dependency>
|
||||
<groupId>com.h2database</groupId>
|
||||
<artifactId>h2</artifactId>
|
||||
<version>1.4.197</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>4.12</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
|
|
@ -27,6 +27,15 @@ public class Coordinate {
|
|||
|
||||
public final int x, y, z;
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Coordinate{" +
|
||||
"x=" + x +
|
||||
", y=" + y +
|
||||
", z=" + z +
|
||||
'}';
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
|
|
|
@ -85,7 +85,7 @@ public class BlocksRecordDatabaseService
|
|||
return list;
|
||||
}
|
||||
|
||||
private File getLocalMapBlockFile(Coordinate coordinate){
|
||||
public static File getLocalMapBlockFile(Coordinate coordinate){
|
||||
File mapblockDir = new File("mapblocks");
|
||||
if (!mapblockDir.isDirectory())
|
||||
mapblockDir.mkdir();
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
package io.rudin.minetest.tileserver;
|
||||
|
||||
import io.rudin.minetest.tileserver.accessor.Coordinate;
|
||||
import io.rudin.minetest.tileserver.base.TileServerTest;
|
||||
import io.rudin.minetest.tileserver.blockdb.tables.records.BlocksRecord;
|
||||
import io.rudin.minetest.tileserver.service.BlocksRecordService;
|
||||
import org.junit.Test;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.util.List;
|
||||
|
||||
public class BlocksRecordServiceTest extends TileServerTest {
|
||||
|
||||
@Inject BlocksRecordService blocksRecordService;
|
||||
|
||||
@Test
|
||||
public void test(){
|
||||
|
||||
List<BlocksRecord> stride = blocksRecordService.getTopDownYStride(0, 0, -1, 16);
|
||||
|
||||
for (BlocksRecord record: stride){
|
||||
System.out.println(new Coordinate(record) + ":" + record.getData().length);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
package io.rudin.minetest.tileserver;
|
||||
|
||||
import io.rudin.minetest.tileserver.base.TileServerTest;
|
||||
import org.junit.Test;
|
||||
|
||||
public class UnitTestValidation extends TileServerTest {
|
||||
|
||||
@Test
|
||||
public void validateTestSetup(){}
|
||||
}
|
|
@ -0,0 +1,59 @@
|
|||
package io.rudin.minetest.tileserver.base;
|
||||
|
||||
import com.google.inject.Guice;
|
||||
import com.google.inject.Injector;
|
||||
import com.google.inject.Key;
|
||||
import com.google.inject.Provider;
|
||||
import io.rudin.minetest.tileserver.DBMigration;
|
||||
import io.rudin.minetest.tileserver.config.TileServerConfig;
|
||||
import io.rudin.minetest.tileserver.module.ConfigModule;
|
||||
import io.rudin.minetest.tileserver.module.DBModule;
|
||||
import io.rudin.minetest.tileserver.module.ServiceModule;
|
||||
import io.rudin.minetest.tileserver.module.TestServiceModule;
|
||||
import io.rudin.minetest.tileserver.qualifier.MapDB;
|
||||
import org.aeonbits.owner.ConfigFactory;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
import java.sql.Connection;
|
||||
import java.sql.SQLException;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class TileServerTest {
|
||||
|
||||
@Before
|
||||
public void init() throws SQLException {
|
||||
Map<String, String> properties = new HashMap<>();
|
||||
properties.put("minetest.db.url", "jdbc:h2:mem:tileserver");
|
||||
properties.put("minetest.db.username", "sa");
|
||||
properties.put("minetest.db.password", "");
|
||||
properties.put("minetest.db.driver", "org.h2.Driver");
|
||||
|
||||
TileServerConfig cfg = ConfigFactory.create(TileServerConfig.class, properties);
|
||||
|
||||
injector = Guice.createInjector(
|
||||
new ConfigModule(cfg),
|
||||
new DBModule(cfg),
|
||||
new TestServiceModule()
|
||||
);
|
||||
|
||||
DataSource dataSource = injector.getInstance(Key.get(DataSource.class, MapDB.class));
|
||||
try (Connection connection = dataSource.getConnection()){
|
||||
connection.createStatement().execute("runscript from 'classpath:/minetest-db.sql'");
|
||||
}
|
||||
|
||||
//does not work: create function plsql not available in h2
|
||||
//injector.getInstance(DBMigration.class).migrate();
|
||||
|
||||
injector.injectMembers(this);
|
||||
}
|
||||
|
||||
private Injector injector;
|
||||
|
||||
@After
|
||||
public void after(){
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
package io.rudin.minetest.tileserver.module;
|
||||
|
||||
import com.google.inject.AbstractModule;
|
||||
import io.rudin.minetest.tileserver.ColorTable;
|
||||
import io.rudin.minetest.tileserver.config.LayerConfig;
|
||||
import io.rudin.minetest.tileserver.config.TileServerConfig;
|
||||
import io.rudin.minetest.tileserver.provider.ColorTableProvider;
|
||||
import io.rudin.minetest.tileserver.provider.ExecutorProvider;
|
||||
import io.rudin.minetest.tileserver.provider.LayerConfigProvider;
|
||||
import io.rudin.minetest.tileserver.service.BlocksRecordLocalService;
|
||||
import io.rudin.minetest.tileserver.service.BlocksRecordService;
|
||||
import io.rudin.minetest.tileserver.service.EventBus;
|
||||
import io.rudin.minetest.tileserver.service.TileCache;
|
||||
import io.rudin.minetest.tileserver.service.impl.*;
|
||||
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
|
||||
public class TestServiceModule extends AbstractModule {
|
||||
|
||||
|
||||
@Override
|
||||
protected void configure() {
|
||||
|
||||
bind(TileCache.class).to(FileTileCache.class);
|
||||
bind(EventBus.class).to(EventBusImpl.class);
|
||||
bind(ColorTable.class).toProvider(ColorTableProvider.class);
|
||||
bind(ExecutorService.class).toProvider(ExecutorProvider.class);
|
||||
bind(ScheduledExecutorService.class).toProvider(ExecutorProvider.class);
|
||||
bind(LayerConfig.class).toProvider(LayerConfigProvider.class);
|
||||
|
||||
bind(BlocksRecordService.class).to(BlocksRecordLocalService.class);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,80 @@
|
|||
package io.rudin.minetest.tileserver.service;
|
||||
|
||||
import io.rudin.minetest.tileserver.accessor.Coordinate;
|
||||
import io.rudin.minetest.tileserver.blockdb.tables.records.BlocksRecord;
|
||||
import io.rudin.minetest.tileserver.service.impl.BlocksRecordDatabaseService;
|
||||
import io.rudin.minetest.tileserver.util.StreamUtil;
|
||||
import sun.security.action.OpenFileInputStreamAction;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.InputStream;
|
||||
import java.util.*;
|
||||
|
||||
public class BlocksRecordLocalService implements BlocksRecordService {
|
||||
|
||||
private final Map<Coordinate, BlocksRecord> cache = new HashMap<>();
|
||||
|
||||
@Override
|
||||
public List<BlocksRecord> getTopDownYStride(int x, int z, int minY, int maxY) {
|
||||
|
||||
List<BlocksRecord> result = new ArrayList<>();
|
||||
|
||||
for (int y=minY; y<=maxY; y++){
|
||||
Coordinate coordinate = new Coordinate(x, y, z);
|
||||
|
||||
Optional<BlocksRecord> optionalRecord = get(coordinate);
|
||||
if (optionalRecord.isPresent())
|
||||
result.add(optionalRecord.get());
|
||||
}
|
||||
|
||||
result.sort(Comparator.comparingInt(BlocksRecord::getPosy));
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static File getLocalMapBlockFile(Coordinate coordinate){
|
||||
File mapblockDir = new File("testdata/mapblocks");
|
||||
if (!mapblockDir.isDirectory())
|
||||
mapblockDir.mkdir();
|
||||
|
||||
return new File(mapblockDir, coordinate.x + "." + coordinate.y + "." + coordinate.z);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<BlocksRecord> get(Coordinate coords) {
|
||||
BlocksRecord record = cache.get(coords);
|
||||
|
||||
if (record != null)
|
||||
return Optional.of(record);
|
||||
|
||||
File file = getLocalMapBlockFile(coords);
|
||||
|
||||
if (!file.isFile())
|
||||
return Optional.empty();
|
||||
|
||||
try (InputStream input = new FileInputStream(file)){
|
||||
ByteArrayOutputStream output = new ByteArrayOutputStream();
|
||||
StreamUtil.copyStream(input, output);
|
||||
|
||||
record = new BlocksRecord();
|
||||
record.setData(output.toByteArray());
|
||||
record.setMtime(file.lastModified());
|
||||
record.setPosx(coords.x);
|
||||
record.setPosy(coords.y);
|
||||
record.setPosz(coords.z);
|
||||
cache.put(coords, record);
|
||||
return Optional.of(record);
|
||||
|
||||
} catch (Exception e){
|
||||
throw new IllegalArgumentException(e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(BlocksRecord block) {
|
||||
cache.put(new Coordinate(block), block);
|
||||
}
|
||||
}
|
|
@ -12,7 +12,6 @@
|
|||
<logger name="io.rudin.minetest.tileserver.TileRenderer" level="DEBUG"/>
|
||||
|
||||
<root level="info">
|
||||
<appender-ref ref="logfile" />
|
||||
<appender-ref ref="console" />
|
||||
</root>
|
||||
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
|
||||
create table blocks(
|
||||
posx int not null,
|
||||
posy int not null,
|
||||
posz int not null,
|
||||
data bytea,
|
||||
|
||||
PRIMARY KEY(posx,posy,posz)
|
||||
);
|
Loading…
Reference in New Issue