View Javadoc
1   package com.atlassian.dbexporter.exporter;
2   
3   import com.atlassian.dbexporter.Column;
4   import com.atlassian.dbexporter.ConnectionProvider;
5   import com.atlassian.dbexporter.Context;
6   import com.atlassian.dbexporter.EntityNameProcessor;
7   import com.atlassian.dbexporter.ImportExportErrorService;
8   import com.atlassian.dbexporter.Table;
9   import com.atlassian.dbexporter.node.NodeCreator;
10  import com.atlassian.dbexporter.progress.ProgressMonitor;
11  import org.junit.Before;
12  import org.junit.Test;
13  import org.junit.runner.RunWith;
14  import org.mockito.Mock;
15  import org.mockito.junit.MockitoJUnitRunner;
16  
17  import java.sql.Connection;
18  import java.sql.DatabaseMetaData;
19  import java.sql.ResultSet;
20  import java.sql.ResultSetMetaData;
21  import java.sql.Statement;
22  import java.sql.Types;
23  import java.util.Collections;
24  
25  import static org.mockito.ArgumentMatchers.any;
26  import static org.mockito.ArgumentMatchers.anyString;
27  import static org.mockito.Mockito.mock;
28  import static org.mockito.Mockito.verify;
29  import static org.mockito.Mockito.when;
30  
31  @RunWith(MockitoJUnitRunner.class)
32  public class DataExporterTest {
33      @Mock
34      private ImportExportErrorService errorService;
35      @Mock
36      private ExportConfiguration configuration;
37      @Mock
38      private ConnectionProvider connectionProvider;
39      @Mock
40      private Connection connection;
41      @Mock
42      private DatabaseMetaData metaData;
43      @Mock
44      private ProgressMonitor progressMonitor;
45      @Mock
46      private EntityNameProcessor entityNameProcessor;
47      @Mock
48      private NodeCreator nodeCreator;
49  
50      private DataExporter dataExporter;
51  
52      @Before
53      public void setUp() throws Exception {
54          when(configuration.getConnectionProvider()).thenReturn(connectionProvider);
55          when(connectionProvider.getConnection()).thenReturn(connection);
56          when(connection.getMetaData()).thenReturn(metaData);
57          when(metaData.getIdentifierQuoteString()).thenReturn(" ");
58          when(configuration.getProgressMonitor()).thenReturn(progressMonitor);
59          when(configuration.getEntityNameProcessor()).thenReturn(entityNameProcessor);
60          when(entityNameProcessor.columnName(anyString())).thenAnswer(invocation -> invocation.getArgument(0));
61  
62          dataExporter = new DataExporter(errorService, null);
63      }
64  
65      @Test
66      public void shouldExportBinaryColumn() throws Exception {
67          final byte[] bytes = new byte[]{0, 1, 100, 2};
68  
69          when(nodeCreator.addNode(anyString())).thenReturn(nodeCreator);
70          when(nodeCreator.addAttribute(anyString(), anyString())).thenReturn(nodeCreator);
71          when(nodeCreator.setContentAsBinary(any())).thenReturn(nodeCreator);
72          when(nodeCreator.closeEntity()).thenReturn(nodeCreator);
73          Statement st = mock(Statement.class);
74          when(connection.createStatement()).thenReturn(st);
75          ResultSet rs = mock(ResultSet.class);
76          when(st.executeQuery(anyString())).thenReturn(rs);
77          ResultSetMetaData rsmd = mock(ResultSetMetaData.class);
78          when(rs.getMetaData()).thenReturn(rsmd);
79          when(rsmd.getColumnCount()).thenReturn(1);
80          when(rs.next()).thenReturn(true).thenReturn(false);
81          when(rsmd.getColumnType(1)).thenReturn(Types.BINARY);
82          when(rsmd.getColumnName(1)).thenReturn("column1");
83          when(rs.getBytes(1)).thenReturn(bytes);
84  
85          Context context = new Context(new Table("table",
86                  Collections.singletonList(new Column("column", Types.BINARY, null, null, null, null)),
87                  Collections.emptyList()));
88  
89          dataExporter.export(nodeCreator, configuration, context);
90  
91          verify(nodeCreator).setContentAsBinary(bytes);
92      }
93  }