Java tutorial
/** * Copyright (c)2010-2011 Enterprise Website Content Management System(EWCMS), All rights reserved. * EWCMS PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * http://www.ewcms.com */ package com.ewcms.publication.deploy.provider; import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.io.ByteArrayOutputStream; import org.apache.commons.vfs2.FileContent; import org.apache.commons.vfs2.FileObject; import org.apache.commons.vfs2.FileSystemException; import org.apache.commons.vfs2.FileSystemManager; import org.apache.commons.vfs2.FileSystemOptions; import org.apache.commons.vfs2.UserAuthenticator; import org.apache.commons.vfs2.impl.DefaultFileSystemConfigBuilder; import org.junit.Assert; import org.junit.Test; import com.ewcms.publication.PublishException; import com.ewcms.publication.deploy.DeployOperatorable; import com.ewcms.publication.deploy.provider.DeployOperatorBase; /** * DeployOperatorBase? * * @author wangwei */ public class DeployOperatorBaseTest { @Test public void testSetAuthenticator() throws Exception { DeployOperatorable operator = new DeployOperatorBaseImpl.Builder().build(); FileSystemOptions opts = new FileSystemOptions(); DeployOperatorBase operatorBase = (DeployOperatorBase) operator; operatorBase.setAuthenticator(opts, "user", "password"); UserAuthenticator auth = DefaultFileSystemConfigBuilder.getInstance().getUserAuthenticator(opts); Assert.assertNotNull(auth); } @Test public void testUsernameIsNullSetAuthenticator() throws Exception { DeployOperatorable operator = new DeployOperatorBaseImpl.Builder().build(); FileSystemOptions opts = new FileSystemOptions(); DeployOperatorBase operatorBase = (DeployOperatorBase) operator; operatorBase.setAuthenticator(opts, null, null); UserAuthenticator auth = DefaultFileSystemConfigBuilder.getInstance().getUserAuthenticator(opts); Assert.assertNull(auth); } @Test public void testGetFullTargetPath() { DeployOperatorable operator = new DeployOperatorBaseImpl.Builder().build(); DeployOperatorBase operatorBase = (DeployOperatorBase) operator; String root = "root"; String path = "test/index.html"; String target = operatorBase.targetFullPath(root, path); String excepted = "/root/test/index.html"; Assert.assertEquals(excepted, target); root = "root/"; path = "test//index.html"; target = operatorBase.targetFullPath(root, path); Assert.assertEquals(excepted, target); root = "/root/"; path = "/test/index.html"; target = operatorBase.targetFullPath(root, path); Assert.assertEquals(excepted, target); } @Test public void testCopyFilePath() throws Exception { String rootPath = System.getProperty("java.io.tmpdir", "/tmp"); DeployOperatorable operator = new DeployOperatorBaseImpl.Builder().setPath(rootPath).build(); DeployOperatorBaseImpl operatorImpl = (DeployOperatorBaseImpl) operator; String source = DeployOperatorBaseTest.class.getResource("write.jpg").getPath(); operatorImpl.copy(source, "/docuemnt/1/write.jpg"); FileObject fileObject = operatorImpl.getFileObject(); ByteArrayOutputStream content = (ByteArrayOutputStream) fileObject.getContent().getOutputStream(); Assert.assertEquals(335961, content.size()); } @Test public void testCopyFileBytes() throws Exception { String rootPath = System.getProperty("java.io.tmpdir", "/tmp"); DeployOperatorable operator = new DeployOperatorBaseImpl.Builder().setPath(rootPath).build(); DeployOperatorBaseImpl operatorImpl = (DeployOperatorBaseImpl) operator; String content = "test-byte"; operatorImpl.copy(content.getBytes(), "/docuemnt/2/write.jpg"); FileObject fileObject = operatorImpl.getFileObject(); ByteArrayOutputStream stream = (ByteArrayOutputStream) fileObject.getContent().getOutputStream(); Assert.assertEquals(content.getBytes().length, stream.size()); } @Test public void testFileObjectExistDelete() throws Exception { String rootPath = System.getProperty("java.io.tmpdir", "/tmp"); DeployOperatorable operator = new DeployOperatorBaseImpl.Builder().setPath(rootPath).build(); DeployOperatorBaseImpl operatorImpl = (DeployOperatorBaseImpl) operator; FileObject fileObject = operatorImpl.getFileObject(); when(fileObject.exists()).thenReturn(true); operatorImpl.delete("/document/1/test.html"); verify(fileObject, atLeastOnce()).delete(); } @Test public void testFileObjectNotExistDelete() throws Exception { String rootPath = System.getProperty("java.io.tmpdir", "/tmp"); DeployOperatorable operator = new DeployOperatorBaseImpl.Builder().setPath(rootPath).build(); DeployOperatorBaseImpl operatorImpl = (DeployOperatorBaseImpl) operator; FileObject fileObject = operatorImpl.getFileObject(); when(fileObject.exists()).thenReturn(false); operatorImpl.delete("/document/1/test.html"); verify(fileObject, never()).delete(); } @Test public void testTestSuccess() throws Exception { String rootPath = System.getProperty("java.io.tmpdir", "/tmp"); DeployOperatorable operator = new DeployOperatorBaseImpl.Builder().setPath(rootPath).build(); DeployOperatorBaseImpl operatorImpl = (DeployOperatorBaseImpl) operator; FileObject fileObject = operatorImpl.getRootFileObject(); when(fileObject.exists()).thenReturn(true); when(fileObject.isWriteable()).thenReturn(true); Assert.assertTrue(operatorImpl.test()); } @Test public void testDirNotConnectionSuccess() throws Exception { String rootPath = System.getProperty("java.io.tmpdir", "/tmp"); DeployOperatorable operator = new DeployOperatorBaseImpl.Builder(true).setPath(rootPath).build(); DeployOperatorBaseImpl operatorImpl = (DeployOperatorBaseImpl) operator; try { Assert.assertTrue(operatorImpl.test()); Assert.fail(); } catch (PublishException e) { Assert.assertEquals(e.getMessage(), "error.output.notconnect"); } } @Test public void testDirNotExistTest() throws Exception { String rootPath = System.getProperty("java.io.tmpdir", "/tmp"); DeployOperatorable operator = new DeployOperatorBaseImpl.Builder().setPath(rootPath).build(); DeployOperatorBaseImpl operatorImpl = (DeployOperatorBaseImpl) operator; FileObject fileObject = operatorImpl.getRootFileObject(); when(fileObject.exists()).thenReturn(false); when(fileObject.isWriteable()).thenReturn(true); try { Assert.assertTrue(operatorImpl.test()); Assert.fail(); } catch (PublishException e) { Assert.assertEquals(e.getMessage(), "error.output.nodir"); } } @Test public void testDirNotWriteableTest() throws Exception { String rootPath = System.getProperty("java.io.tmpdir", "/tmp"); DeployOperatorable operator = new DeployOperatorBaseImpl.Builder().setPath(rootPath).build(); DeployOperatorBaseImpl operatorImpl = (DeployOperatorBaseImpl) operator; FileObject fileObject = operatorImpl.getRootFileObject(); when(fileObject.exists()).thenReturn(true); when(fileObject.isWriteable()).thenReturn(false); try { Assert.assertTrue(operatorImpl.test()); Assert.fail(); } catch (PublishException e) { Assert.assertEquals(e.getMessage(), "error.output.notwrite"); } } static class DeployOperatorBaseImpl extends DeployOperatorBase { private FileObject fileObject = mock(FileObject.class); private FileObject rootFileObject = mock(FileObject.class); private static boolean getRootFileObjectIsException; public static class Builder extends BuilderBase { public Builder() { this(false); } public Builder(boolean exception) { getRootFileObjectIsException = exception; } @Override public DeployOperatorable build() { return new DeployOperatorBaseImpl(this); } } public DeployOperatorBaseImpl(BuilderBase builder) { super(builder); } @Override protected FileObject getTargetFileObject(FileObject root, String path) throws FileSystemException { FileContent content = mock(FileContent.class); content.setAttribute("path", path); when(content.getOutputStream()).thenReturn(new ByteArrayOutputStream()); when(fileObject.getContent()).thenReturn(content); return fileObject; } @Override protected FileObject getRootFileObject(FileSystemOptions opts, BuilderBase builder, FileSystemManager manager) throws FileSystemException { if (getRootFileObjectIsException) { throw new FileSystemException("mock exception"); } return rootFileObject; } public FileObject getFileObject() { return fileObject; } public FileObject getRootObject() { return rootFileObject; } } }