@Test public void testLs_1_a_f_dirs_links() throws Exception { SessionFactory sessionFactory = mock(SessionFactory.class); Session session = mock(Session.class); TestRemoteFileOutboundGateway gw = new TestRemoteFileOutboundGateway(sessionFactory, "ls", "payload"); gw.setOptions("-1 -a -f -dirs -links"); gw.afterPropertiesSet(); when(sessionFactory.getSession()).thenReturn(session); TestLsEntry[] files = fileList(); when(session.list("testremote/")).thenReturn(files); @SuppressWarnings("unchecked") MessageBuilder<List<String>> out = (MessageBuilder<List<String>>) gw .handleRequestMessage(new GenericMessage<>("testremote")); assertEquals(6, out.getPayload().size()); assertEquals("f2", out.getPayload().get(0)); assertEquals("f1", out.getPayload().get(1)); assertEquals("f3", out.getPayload().get(2)); assertEquals("f4", out.getPayload().get(3)); assertEquals(".f5", out.getPayload().get(4)); assertEquals(".f6", out.getPayload().get(5)); }
@Test public void testLs_1_dirs_links() throws Exception { SessionFactory sessionFactory = mock(SessionFactory.class); Session session = mock(Session.class); TestRemoteFileOutboundGateway gw = new TestRemoteFileOutboundGateway(sessionFactory, "ls", "payload"); gw.setOptions("-1 -dirs -links"); gw.afterPropertiesSet(); when(sessionFactory.getSession()).thenReturn(session); TestLsEntry[] files = fileList(); when(session.list("testremote/")).thenReturn(files); @SuppressWarnings("unchecked") MessageBuilder<List<String>> out = (MessageBuilder<List<String>>) gw .handleRequestMessage(new GenericMessage<>("testremote")); assertEquals(4, out.getPayload().size()); assertEquals("f1", out.getPayload().get(0)); assertEquals("f2", out.getPayload().get(1)); assertEquals("f3", out.getPayload().get(2)); assertEquals("f4", out.getPayload().get(3)); }
@Test public void testLs_1_dirs() throws Exception { SessionFactory sessionFactory = mock(SessionFactory.class); Session session = mock(Session.class); TestRemoteFileOutboundGateway gw = new TestRemoteFileOutboundGateway(sessionFactory, "ls", "payload"); gw.setOptions("-1 -dirs"); gw.afterPropertiesSet(); when(sessionFactory.getSession()).thenReturn(session); TestLsEntry[] files = fileList(); when(session.list("testremote/")).thenReturn(files); @SuppressWarnings("unchecked") MessageBuilder<List<String>> out = (MessageBuilder<List<String>>) gw .handleRequestMessage(new GenericMessage<>("testremote")); assertEquals(3, out.getPayload().size()); assertEquals("f1", out.getPayload().get(0)); assertEquals("f2", out.getPayload().get(1)); assertEquals("f3", out.getPayload().get(2)); }
@Test public void testLs_1_f() throws Exception { //no sort SessionFactory sessionFactory = mock(SessionFactory.class); Session session = mock(Session.class); TestRemoteFileOutboundGateway gw = new TestRemoteFileOutboundGateway(sessionFactory, "ls", "payload"); gw.setOptions("-1 -f"); gw.afterPropertiesSet(); when(sessionFactory.getSession()).thenReturn(session); TestLsEntry[] files = fileList(); when(session.list("testremote/")).thenReturn(files); @SuppressWarnings("unchecked") MessageBuilder<List<String>> out = (MessageBuilder<List<String>>) gw .handleRequestMessage(new GenericMessage<>("testremote")); assertEquals(2, out.getPayload().size()); assertEquals("f2", out.getPayload().get(0)); assertEquals("f1", out.getPayload().get(1)); }
@Test public void testLs_1() throws Exception { SessionFactory sessionFactory = mock(SessionFactory.class); Session session = mock(Session.class); TestRemoteFileOutboundGateway gw = new TestRemoteFileOutboundGateway(sessionFactory, "ls", "payload"); gw.setOptions("-1"); gw.afterPropertiesSet(); when(sessionFactory.getSession()).thenReturn(session); TestLsEntry[] files = fileList(); when(session.list("testremote/")).thenReturn(files); @SuppressWarnings("unchecked") MessageBuilder<List<String>> out = (MessageBuilder<List<String>>) gw .handleRequestMessage(new GenericMessage<>("testremote")); assertEquals(2, out.getPayload().size()); assertEquals("f1", out.getPayload().get(0)); assertEquals("f2", out.getPayload().get(1)); }
@Test public void testLs_None() throws Exception { SessionFactory sessionFactory = mock(SessionFactory.class); Session session = mock(Session.class); TestRemoteFileOutboundGateway gw = new TestRemoteFileOutboundGateway(sessionFactory, "ls", "payload"); gw.afterPropertiesSet(); when(sessionFactory.getSession()).thenReturn(session); TestLsEntry[] files = new TestLsEntry[0]; when(session.list("testremote/")).thenReturn(files); @SuppressWarnings("unchecked") MessageBuilder<List<TestLsEntry>> out = (MessageBuilder<List<TestLsEntry>>) gw .handleRequestMessage(new GenericMessage<>("testremote")); assertEquals(0, out.getPayload().size()); }
@Test public void testLs() throws Exception { SessionFactory sessionFactory = mock(SessionFactory.class); Session session = mock(Session.class); TestRemoteFileOutboundGateway gw = new TestRemoteFileOutboundGateway(sessionFactory, "ls", "payload"); gw.afterPropertiesSet(); when(sessionFactory.getSession()).thenReturn(session); TestLsEntry[] files = fileList(); when(session.list("testremote/x/")).thenReturn(files); @SuppressWarnings("unchecked") MessageBuilder<List<TestLsEntry>> out = (MessageBuilder<List<TestLsEntry>>) gw .handleRequestMessage(new GenericMessage<>("testremote/x")); assertEquals(2, out.getPayload().size()); assertSame(files[1], out.getPayload().get(0)); // sort by default assertSame(files[0], out.getPayload().get(1)); assertEquals("testremote/x/", out.getHeaders().get(FileHeaders.REMOTE_DIRECTORY)); }
@Test public void testLs_f() throws Exception { SessionFactory sessionFactory = mock(SessionFactory.class); Session session = mock(Session.class); TestRemoteFileOutboundGateway gw = new TestRemoteFileOutboundGateway(sessionFactory, "ls", "payload"); gw.setOptions("-f"); gw.afterPropertiesSet(); when(sessionFactory.getSession()).thenReturn(session); TestLsEntry[] files = fileList(); when(session.list("testremote/x/")).thenReturn(files); @SuppressWarnings("unchecked") MessageBuilder<List<TestLsEntry>> out = (MessageBuilder<List<TestLsEntry>>) gw .handleRequestMessage(new GenericMessage<>("testremote/x")); assertEquals(2, out.getPayload().size()); assertSame(files[0], out.getPayload().get(0)); assertSame(files[1], out.getPayload().get(1)); assertEquals("testremote/x/", out.getHeaders().get(FileHeaders.REMOTE_DIRECTORY)); }
MessageBuilder<List<File>> out = (MessageBuilder<List<File>>) gw .handleRequestMessage(new GenericMessage<>("testremote/*")); assertEquals(2, out.getPayload().size()); assertEquals("f1", out.getPayload().get(0).getName()); assertEquals("f2", out.getPayload().get(1).getName()); assertEquals("testremote/", out.getHeaders().get(FileHeaders.REMOTE_DIRECTORY));
@Test public void testMove() throws Exception { SessionFactory sessionFactory = mock(SessionFactory.class); TestRemoteFileOutboundGateway gw = new TestRemoteFileOutboundGateway(sessionFactory, "mv", "payload"); gw.afterPropertiesSet(); Session<?> session = mock(Session.class); final AtomicReference<String> args = new AtomicReference<String>(); doAnswer(invocation -> { Object[] arguments = invocation.getArguments(); args.set((String) arguments[0] + (String) arguments[1]); return null; }).when(session).rename(anyString(), anyString()); when(sessionFactory.getSession()).thenReturn(session); Message<String> requestMessage = MessageBuilder.withPayload("foo") .setHeader(FileHeaders.RENAME_TO, "bar") .build(); MessageBuilder<?> out = (MessageBuilder<?>) gw.handleRequestMessage(requestMessage); assertEquals("foo", out.getHeaders().get(FileHeaders.REMOTE_FILE)); assertEquals("foobar", args.get()); assertEquals(Boolean.TRUE, out.getPayload()); }
@Test public void testLs_f_R_dirs() throws Exception { SessionFactory sessionFactory = mock(SessionFactory.class); Session session = mock(Session.class); TestRemoteFileOutboundGateway gw = new TestRemoteFileOutboundGateway(sessionFactory, "ls", "payload"); gw.setOptions("-f -R -dirs"); gw.afterPropertiesSet(); when(sessionFactory.getSession()).thenReturn(session); TestLsEntry[] level1 = level1List(); TestLsEntry[] level2 = level2List(); TestLsEntry[] level3 = level3List(); when(session.list("testremote/x/")).thenReturn(level1); when(session.list("testremote/x/d1/")).thenReturn(level2); when(session.list("testremote/x/d1/d2/")).thenReturn(level3); @SuppressWarnings("unchecked") MessageBuilder<List<TestLsEntry>> out = (MessageBuilder<List<TestLsEntry>>) gw .handleRequestMessage(new GenericMessage<>("testremote/x")); assertEquals(5, out.getPayload().size()); assertEquals("f1", out.getPayload().get(0).getFilename()); assertEquals("d1", out.getPayload().get(1).getFilename()); assertEquals("d1/d2", out.getPayload().get(2).getFilename()); assertEquals("d1/f3", out.getPayload().get(3).getFilename()); assertEquals("f2", out.getPayload().get(4).getFilename()); assertEquals("testremote/x/", out.getHeaders().get(FileHeaders.REMOTE_DIRECTORY)); }
@Test public void testMGetSingle() throws Exception { SessionFactory sessionFactory = mock(SessionFactory.class); TestRemoteFileOutboundGateway gw = new TestRemoteFileOutboundGateway(sessionFactory, "mget", "payload"); gw.setLocalDirectory(new File(this.tmpDir)); gw.afterPropertiesSet(); new File(this.tmpDir + "/f1").delete(); when(sessionFactory.getSession()).thenReturn(new TestSession() { @Override public void read(String source, OutputStream outputStream) throws IOException { outputStream.write("testData".getBytes()); } @Override public TestLsEntry[] list(String path) throws IOException { return new TestLsEntry[] { new TestLsEntry("f1", 123, false, false, 1234, "-r--r--r--") }; } }); @SuppressWarnings("unchecked") MessageBuilder<List<File>> out = (MessageBuilder<List<File>>) gw .handleRequestMessage(new GenericMessage<>("testremote/f1")); assertEquals(1, out.getPayload().size()); assertEquals("f1", out.getPayload().get(0).getName()); assertEquals("testremote/", out.getHeaders().get(FileHeaders.REMOTE_DIRECTORY)); }
@Test public void testLs_1_a_f_dirs_links_filtered() throws Exception { SessionFactory sessionFactory = mock(SessionFactory.class); Session session = mock(Session.class); TestRemoteFileOutboundGateway gw = new TestRemoteFileOutboundGateway(sessionFactory, "ls", "payload"); gw.setOptions("-1 -a -f -dirs -links"); gw.setFilter(new TestPatternFilter("*4")); gw.afterPropertiesSet(); when(sessionFactory.getSession()).thenReturn(session); TestLsEntry[] files = fileList(); when(session.list("testremote/")).thenReturn(files); @SuppressWarnings("unchecked") MessageBuilder<List<String>> out = (MessageBuilder<List<String>>) gw .handleRequestMessage(new GenericMessage<>("testremote")); assertEquals(1, out.getPayload().size()); assertEquals("f4", out.getPayload().get(0)); }
@Test public void testMoveWithExpression() throws Exception { SessionFactory sessionFactory = mock(SessionFactory.class); TestRemoteFileOutboundGateway gw = new TestRemoteFileOutboundGateway(sessionFactory, "mv", "payload"); gw.setRenameExpression(PARSER.parseExpression("payload.substring(1)")); gw.afterPropertiesSet(); Session<?> session = mock(Session.class); final AtomicReference<String> args = new AtomicReference<String>(); doAnswer(invocation -> { Object[] arguments = invocation.getArguments(); args.set((String) arguments[0] + arguments[1]); return null; }).when(session).rename(anyString(), anyString()); when(sessionFactory.getSession()).thenReturn(session); MessageBuilder<?> out = (MessageBuilder<?>) gw.handleRequestMessage(new GenericMessage<>("foo")); assertEquals("oo", out.getHeaders().get(FileHeaders.RENAME_TO)); assertEquals("foo", out.getHeaders().get(FileHeaders.REMOTE_FILE)); assertEquals("foooo", args.get()); assertEquals(Boolean.TRUE, out.getPayload()); }
@Test public void testLs_f_R() throws Exception { SessionFactory sessionFactory = mock(SessionFactory.class); Session session = mock(Session.class); TestRemoteFileOutboundGateway gw = new TestRemoteFileOutboundGateway(sessionFactory, "ls", "payload"); gw.setOptions("-f -R"); gw.afterPropertiesSet(); when(sessionFactory.getSession()).thenReturn(session); TestLsEntry[] level1 = level1List(); TestLsEntry[] level2 = level2List(); TestLsEntry[] level3 = level3List(); when(session.list("testremote/x/")).thenReturn(level1); when(session.list("testremote/x/d1/")).thenReturn(level2); when(session.list("testremote/x/d1/d2/")).thenReturn(level3); @SuppressWarnings("unchecked") MessageBuilder<List<TestLsEntry>> out = (MessageBuilder<List<TestLsEntry>>) gw .handleRequestMessage(new GenericMessage<>("testremote/x")); assertEquals(4, out.getPayload().size()); assertEquals("f1", out.getPayload().get(0).getFilename()); assertEquals("d1/d2/f4", out.getPayload().get(1).getFilename()); assertEquals("d1/f3", out.getPayload().get(2).getFilename()); assertEquals("f2", out.getPayload().get(3).getFilename()); assertEquals("testremote/x/", out.getHeaders().get(FileHeaders.REMOTE_DIRECTORY)); }
@Test public void testRm() throws Exception { SessionFactory sessionFactory = mock(SessionFactory.class); Session session = mock(Session.class); TestRemoteFileOutboundGateway gw = new TestRemoteFileOutboundGateway(sessionFactory, "rm", "payload"); gw.afterPropertiesSet(); when(sessionFactory.getSession()).thenReturn(session); when(session.remove("testremote/x/f1")).thenReturn(Boolean.TRUE); @SuppressWarnings("unchecked") MessageBuilder<Boolean> out = (MessageBuilder<Boolean>) gw .handleRequestMessage(new GenericMessage<>("testremote/x/f1")); assertEquals(Boolean.TRUE, out.getPayload()); verify(session).remove("testremote/x/f1"); assertEquals("testremote/x/", out.getHeaders().get(FileHeaders.REMOTE_DIRECTORY)); assertEquals("f1", out.getHeaders().get(FileHeaders.REMOTE_FILE)); }
@Test public void testMoveWithMkDirs() throws Exception { SessionFactory sessionFactory = mock(SessionFactory.class); TestRemoteFileOutboundGateway gw = new TestRemoteFileOutboundGateway(sessionFactory, "mv", "payload"); gw.setRenameExpression(PARSER.parseExpression("'foo/bar/baz'")); gw.afterPropertiesSet(); Session<?> session = mock(Session.class); final AtomicReference<String> args = new AtomicReference<String>(); doAnswer(invocation -> { Object[] arguments = invocation.getArguments(); args.set((String) arguments[0] + (String) arguments[1]); return null; }).when(session).rename(anyString(), anyString()); final List<String> madeDirs = new ArrayList<String>(); doAnswer(invocation -> { madeDirs.add(invocation.getArgument(0)); return null; }).when(session).mkdir(anyString()); when(sessionFactory.getSession()).thenReturn(session); Message<String> requestMessage = MessageBuilder.withPayload("foo") .setHeader(FileHeaders.RENAME_TO, "bar") .build(); MessageBuilder<?> out = (MessageBuilder<?>) gw.handleRequestMessage(requestMessage); assertEquals("foo", out.getHeaders().get(FileHeaders.REMOTE_FILE)); assertEquals("foofoo/bar/baz", args.get()); assertEquals(Boolean.TRUE, out.getPayload()); assertEquals(2, madeDirs.size()); assertEquals("foo", madeDirs.get(0)); assertEquals("foo/bar", madeDirs.get(1)); }
MessageBuilder<File> out = (MessageBuilder<File>) gw.handleRequestMessage(new GenericMessage<>("x/f1")); File outFile = new File(this.tmpDir + "/f1"); assertEquals(outFile, out.getPayload()); assertTrue(outFile.exists()); assertEquals(modified.getTime(), outFile.lastModified());
@Test public void testGet() throws Exception { SessionFactory sessionFactory = mock(SessionFactory.class); TestRemoteFileOutboundGateway gw = new TestRemoteFileOutboundGateway(sessionFactory, "get", "payload"); gw.setLocalDirectory(new File(this.tmpDir)); gw.afterPropertiesSet(); new File(this.tmpDir + "/f1").delete(); when(sessionFactory.getSession()).thenReturn(new TestSession() { @Override public TestLsEntry[] list(String path) throws IOException { return new TestLsEntry[] { new TestLsEntry("f1", 1234, false, false, 12345, "-rw-r--r--") }; } @Override public void read(String source, OutputStream outputStream) throws IOException { outputStream.write("testfile".getBytes()); } }); @SuppressWarnings("unchecked") MessageBuilder<File> out = (MessageBuilder<File>) gw.handleRequestMessage(new GenericMessage<>("f1")); File outFile = new File(this.tmpDir + "/f1"); assertEquals(outFile, out.getPayload()); assertTrue(outFile.exists()); outFile.delete(); assertNull(out.getHeaders().get(FileHeaders.REMOTE_DIRECTORY)); assertEquals("f1", out.getHeaders().get(FileHeaders.REMOTE_FILE)); }
assertEquals(outFile, out.getPayload()); assertContents("foo", outFile); assertEquals(outFile, out.getPayload()); assertContents("footestfile", outFile); assertEquals(outFile, out.getPayload()); assertContents("testfile", outFile);