| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.apache.commons.vfs2.provider.smb.test; |
| |
| import org.apache.commons.AbstractVfsTestCase; |
| import org.apache.commons.vfs2.FileSystemException; |
| import org.apache.commons.vfs2.provider.smb.SmbFileName; |
| import org.apache.commons.vfs2.provider.smb.SmbFileNameParser; |
| import org.junit.Test; |
| |
| /** |
| * Some additional SMB file name test cases. |
| */ |
| public class FileNameTestCase extends AbstractVfsTestCase { |
| |
| /** |
| * Tests parsing a URI into its parts. |
| * |
| * @throws Exception in case of error |
| */ |
| @Test |
| public void testParseUri() throws Exception { |
| // Simple name |
| SmbFileName name = (SmbFileName) SmbFileNameParser.getInstance().parseUri(null, null, |
| "smb://hostname/share/file"); |
| assertEquals("smb", name.getScheme()); |
| assertNull(name.getUserName()); |
| assertNull(name.getPassword()); |
| assertEquals("hostname", name.getHostName()); |
| assertEquals(139, name.getPort()); |
| assertEquals(name.getDefaultPort(), name.getPort()); |
| assertEquals("share", name.getShare()); |
| assertEquals("/file", name.getPath()); |
| assertEquals("smb://hostname/share/", name.getRootURI()); |
| assertEquals("smb://hostname/share/file", name.getURI()); |
| |
| // Name with port |
| name = (SmbFileName) SmbFileNameParser.getInstance().parseUri(null, null, "smb://hostname:9090/share/file"); |
| assertEquals("smb", name.getScheme()); |
| assertNull(name.getUserName()); |
| assertNull(name.getPassword()); |
| assertEquals("hostname", name.getHostName()); |
| assertEquals(9090, name.getPort()); |
| assertEquals("share", name.getShare()); |
| assertEquals("/file", name.getPath()); |
| assertEquals("smb://hostname:9090/share/", name.getRootURI()); |
| assertEquals("smb://hostname:9090/share/file", name.getURI()); |
| |
| // Name with no path |
| name = (SmbFileName) SmbFileNameParser.getInstance().parseUri(null, null, "smb://hostname/share"); |
| assertEquals("smb", name.getScheme()); |
| assertNull(name.getUserName()); |
| assertNull(name.getPassword()); |
| assertEquals("hostname", name.getHostName()); |
| assertEquals(139, name.getPort()); |
| assertEquals("share", name.getShare()); |
| assertEquals("/", name.getPath()); |
| assertEquals("smb://hostname/share/", name.getRootURI()); |
| assertEquals("smb://hostname/share/", name.getURI()); |
| |
| // Name with username |
| name = (SmbFileName) SmbFileNameParser.getInstance().parseUri(null, null, "smb://user@hostname/share/file"); |
| assertEquals("smb", name.getScheme()); |
| assertEquals("user", name.getUserName()); |
| assertNull(name.getPassword()); |
| assertEquals("hostname", name.getHostName()); |
| assertEquals(139, name.getPort()); |
| assertEquals("share", name.getShare()); |
| assertEquals("/file", name.getPath()); |
| assertEquals("smb://user@hostname/share/", name.getRootURI()); |
| assertEquals("smb://user@hostname/share/file", name.getURI()); |
| |
| // Name with extension |
| name = (SmbFileName) SmbFileNameParser.getInstance().parseUri(null, null, "smb://user@hostname/share/file.txt"); |
| assertEquals("smb", name.getScheme()); |
| assertEquals("user", name.getUserName()); |
| assertNull(name.getPassword()); |
| assertEquals("hostname", name.getHostName()); |
| assertEquals(139, name.getPort()); |
| assertEquals("share", name.getShare()); |
| assertEquals("/file.txt", name.getPath()); |
| assertEquals("file.txt", name.getBaseName()); |
| assertEquals("txt", name.getExtension()); |
| assertEquals("smb://user@hostname/share/", name.getRootURI()); |
| assertEquals("smb://user@hostname/share/file.txt", name.getURI()); |
| |
| // Name look likes extension, but isnt |
| name = (SmbFileName) SmbFileNameParser.getInstance().parseUri(null, null, "smb://user@hostname/share/.bashrc"); |
| assertEquals("smb", name.getScheme()); |
| assertEquals("user", name.getUserName()); |
| assertNull(name.getPassword()); |
| assertEquals("hostname", name.getHostName()); |
| assertEquals(139, name.getPort()); |
| assertEquals("share", name.getShare()); |
| assertEquals("/.bashrc", name.getPath()); |
| assertEquals(".bashrc", name.getBaseName()); |
| assertEquals("", name.getExtension()); |
| assertEquals("smb://user@hostname/share/", name.getRootURI()); |
| assertEquals("smb://user@hostname/share/.bashrc", name.getURI()); |
| } |
| |
| /** |
| * Tests error handling in URI parser. |
| * |
| * @throws Exception in case of error |
| */ |
| @Test |
| public void testBadlyFormedUri() throws Exception { |
| // Does not start with smb:// |
| testBadlyFormedUri("smb:", "vfs.provider/missing-double-slashes.error"); |
| testBadlyFormedUri("smb:/", "vfs.provider/missing-double-slashes.error"); |
| testBadlyFormedUri("smb:a", "vfs.provider/missing-double-slashes.error"); |
| |
| // Missing hostname |
| testBadlyFormedUri("smb://", "vfs.provider/missing-hostname.error"); |
| testBadlyFormedUri("smb://:21/share", "vfs.provider/missing-hostname.error"); |
| testBadlyFormedUri("smb:///share", "vfs.provider/missing-hostname.error"); |
| |
| // Empty port |
| testBadlyFormedUri("smb://host:", "vfs.provider/missing-port.error"); |
| testBadlyFormedUri("smb://host:/share", "vfs.provider/missing-port.error"); |
| testBadlyFormedUri("smb://host:port/share/file", "vfs.provider/missing-port.error"); |
| |
| // Missing absolute path |
| testBadlyFormedUri("smb://host:90a", "vfs.provider/missing-hostname-path-sep.error"); |
| testBadlyFormedUri("smb://host?a", "vfs.provider/missing-hostname-path-sep.error"); |
| |
| // Missing share name |
| testBadlyFormedUri("smb://host", "vfs.provider.smb/missing-share-name.error"); |
| testBadlyFormedUri("smb://host/", "vfs.provider.smb/missing-share-name.error"); |
| testBadlyFormedUri("smb://host:9090/", "vfs.provider.smb/missing-share-name.error"); |
| } |
| |
| /** |
| * Assert that parsing a URI fails with the expected error. |
| */ |
| private void testBadlyFormedUri(final String uri, final String errorMsg) { |
| try { |
| SmbFileNameParser.getInstance().parseUri(null, null, uri); |
| fail(); |
| } catch (final FileSystemException e) { |
| assertSameMessage(errorMsg, uri, e); |
| } |
| } |
| } |