PG-Snapshot-DataSource

Open source library that allows creating snapshots of embedded postgres database state and restore from them

License

License

Categories

Categories

Data
GroupId

GroupId

com.afrunt.pgs
ArtifactId

ArtifactId

pg-snapshot-datasource
Last Version

Last Version

0.1
Release Date

Release Date

Type

Type

jar
Description

Description

PG-Snapshot-DataSource
Open source library that allows creating snapshots of embedded postgres database state and restore from them
Project URL

Project URL

https://github.com/afrunt/pg-snapshot-datasource
Source Code Management

Source Code Management

http://github.com/afrunt/pg-snapshot-datasource/tree/master

Download pg-snapshot-datasource

How to add to project

<!-- https://jarcasting.com/artifacts/com.afrunt.pgs/pg-snapshot-datasource/ -->
<dependency>
    <groupId>com.afrunt.pgs</groupId>
    <artifactId>pg-snapshot-datasource</artifactId>
    <version>0.1</version>
</dependency>
// https://jarcasting.com/artifacts/com.afrunt.pgs/pg-snapshot-datasource/
implementation 'com.afrunt.pgs:pg-snapshot-datasource:0.1'
// https://jarcasting.com/artifacts/com.afrunt.pgs/pg-snapshot-datasource/
implementation ("com.afrunt.pgs:pg-snapshot-datasource:0.1")
'com.afrunt.pgs:pg-snapshot-datasource:jar:0.1'
<dependency org="com.afrunt.pgs" name="pg-snapshot-datasource" rev="0.1">
  <artifact name="pg-snapshot-datasource" type="jar" />
</dependency>
@Grapes(
@Grab(group='com.afrunt.pgs', module='pg-snapshot-datasource', version='0.1')
)
libraryDependencies += "com.afrunt.pgs" % "pg-snapshot-datasource" % "0.1"
[com.afrunt.pgs/pg-snapshot-datasource "0.1"]

Dependencies

compile (2)

Group / Artifact Type Version
io.zonky.test : embedded-postgres Optional jar 1.2.10
org.slf4j : slf4j-api Optional jar

test (5)

Group / Artifact Type Version
org.springframework : spring-jdbc jar
org.junit.jupiter : junit-jupiter jar
org.assertj : assertj-core jar
junit : junit jar
org.slf4j : slf4j-simple jar

Project Modules

There are no modules declared in this project.

Build Status

Java library that helps you to create simple embedded postgres database and make the snapshots

Add pg-snapshot-datasource to your project. For maven projects just add this dependency:

<dependency>
    <groupId>com.afrunt.pgs</groupId>
    <artifactId>pg-snapshot-datasource</artifactId>
    <version>0.1</version>
</dependency>

Usage

package com.afrunt.pgs.test;

import com.afrunt.pgs.PgSnapshot;
import com.afrunt.pgs.PgSnapshotDataSource;
import org.junit.jupiter.api.Test;
import org.springframework.jdbc.BadSqlGrammarException;
import org.springframework.jdbc.core.JdbcTemplate;

import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;

public class PgSnapshotDataSourceTest {
    @Test
    public void testSnapshotCreateRestore() throws Exception {
        PgSnapshotDataSource dataSource = new PgSnapshotDataSource();

        PgSnapshot initialState = dataSource.createSnapshot("Initial state");

        JdbcTemplate jdbc = new JdbcTemplate(dataSource);

        jdbc.execute("CREATE TABLE dummy(id bigint PRIMARY KEY)");

        for (int i = 0; i < 10; i++) {
            final var id = i;
            jdbc.update("INSERT INTO dummy (id) VALUES (?)", ps -> ps.setInt(1, id));
        }

        assertThat(jdbc.queryForObject("SELECT COUNT(*) FROM dummy", Integer.class)).isEqualTo(10);

        PgSnapshot mutatedState = dataSource.createSnapshot("Mutated state");

        dataSource.restoreFromSnapshot(initialState);

        assertThatThrownBy(() -> jdbc.queryForObject("SELECT COUNT(*) FROM dummy", Integer.class)).isInstanceOf(BadSqlGrammarException.class);

        dataSource.restoreFromSnapshot(mutatedState);

        assertThat(jdbc.queryForObject("SELECT COUNT(*) FROM dummy", Integer.class)).isEqualTo(10);

        dataSource.close();
    }
}

Versions

Version
0.1