1 package com.atlassian.activeobjects.backup;
2
3 import com.atlassian.activeobjects.admin.PluginToTablesMapping;
4 import com.atlassian.activeobjects.osgi.ActiveObjectsServiceFactory;
5 import com.atlassian.activeobjects.spi.NullBackupProgressMonitor;
6 import com.atlassian.activeobjects.spi.NullRestoreProgressMonitor;
7 import com.atlassian.plugin.PluginAccessor;
8 import net.java.ao.EntityManager;
9 import net.java.ao.atlassian.AtlassianFieldNameConverter;
10 import net.java.ao.atlassian.AtlassianIndexNameConverter;
11 import net.java.ao.atlassian.AtlassianSequenceNameConverter;
12 import net.java.ao.atlassian.AtlassianTriggerNameConverter;
13 import net.java.ao.test.converters.NameConverters;
14 import net.java.ao.test.junit.ActiveObjectsJUnitRunner;
15 import org.apache.commons.io.IOUtils;
16 import org.junit.After;
17 import org.junit.Before;
18 import org.junit.runner.RunWith;
19 import org.slf4j.Logger;
20 import org.slf4j.LoggerFactory;
21
22 import java.io.ByteArrayOutputStream;
23 import java.io.IOException;
24 import java.io.InputStream;
25 import java.io.UnsupportedEncodingException;
26
27 import static org.mockito.Mockito.mock;
28
29 @RunWith(ActiveObjectsJUnitRunner.class)
30 @NameConverters(
31 table = BackupActiveObjectsTableNameConverter.class,
32 field = AtlassianFieldNameConverter.class,
33 sequence = AtlassianSequenceNameConverter.class,
34 trigger = AtlassianTriggerNameConverter.class,
35 index = AtlassianIndexNameConverter.class)
36 public abstract class AbstractTestActiveObjectsBackup {
37 private static final String UTF_8 = "UTF-8";
38
39 protected final Logger logger = LoggerFactory.getLogger(this.getClass());
40
41 protected EntityManager entityManager;
42 private ActiveObjectsBackup aoBackup;
43
44 @Before
45 public final void setUp() {
46 aoBackup = new ActiveObjectsBackup(entityManager.getProvider(), entityManager.getNameConverters(), new ImportExportErrorServiceImpl(new PluginInformationFactory(mock(PluginToTablesMapping.class), mock(PluginAccessor.class))), mock(ActiveObjectsServiceFactory.class));
47 }
48
49 @After
50 public final void tearDown() {
51 aoBackup = null;
52 }
53
54 protected final String save() {
55 final ByteArrayOutputStream os = new ByteArrayOutputStream();
56 aoBackup.save(os, NullBackupProgressMonitor.INSTANCE);
57 try {
58 return os.toString(UTF_8);
59 } catch (UnsupportedEncodingException e) {
60 throw new RuntimeException(e);
61 }
62 }
63
64 protected final void restore(String xmlBackup) throws IOException {
65 aoBackup.restore(IOUtils.toInputStream(xmlBackup, UTF_8), NullRestoreProgressMonitor.INSTANCE);
66 }
67
68 protected final String read(String resource) throws IOException {
69 logger.debug("Reading resource from '{}'", resource);
70 InputStream is = null;
71 try {
72 is = this.getClass().getResourceAsStream(resource);
73 return IOUtils.toString(is, UTF_8);
74 } finally {
75 IOUtils.closeQuietly(is);
76 }
77 }
78 }