blob: e941fdbd0b486fd049eda28db79e5ac0073fc794 [file] [log] [blame]
/**
* 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
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* 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.hadoop.fs.ozone;
import org.apache.hadoop.ozone.OFSPath;
import org.junit.Assert;
import org.junit.Test;
import java.io.IOException;
/**
* Testing basic functions of utility class OFSPath.
*/
public class TestOFSPath {
@Test
public void testParsingVolumeBucketWithKey() {
// Two most common cases: file key and dir key inside a bucket
OFSPath ofsPath = new OFSPath("/volume1/bucket2/dir3/key4");
Assert.assertEquals("", ofsPath.getAuthority());
Assert.assertEquals("volume1", ofsPath.getVolumeName());
Assert.assertEquals("bucket2", ofsPath.getBucketName());
Assert.assertEquals("dir3/key4", ofsPath.getKeyName());
Assert.assertEquals("/volume1/bucket2", ofsPath.getNonKeyPath());
Assert.assertFalse(ofsPath.isMount());
Assert.assertEquals("/volume1/bucket2/dir3/key4", ofsPath.toString());
// The ending '/' matters for key inside a bucket, indicating directory
ofsPath = new OFSPath("/volume1/bucket2/dir3/dir5/");
Assert.assertEquals("", ofsPath.getAuthority());
Assert.assertEquals("volume1", ofsPath.getVolumeName());
Assert.assertEquals("bucket2", ofsPath.getBucketName());
// Check the key must end with '/' (dir5 is a directory)
Assert.assertEquals("dir3/dir5/", ofsPath.getKeyName());
Assert.assertEquals("/volume1/bucket2", ofsPath.getNonKeyPath());
Assert.assertFalse(ofsPath.isMount());
Assert.assertEquals("/volume1/bucket2/dir3/dir5/", ofsPath.toString());
}
@Test
public void testParsingVolumeBucketOnly() {
// Volume and bucket only
OFSPath ofsPath = new OFSPath("/volume1/bucket2/");
Assert.assertEquals("", ofsPath.getAuthority());
Assert.assertEquals("volume1", ofsPath.getVolumeName());
Assert.assertEquals("bucket2", ofsPath.getBucketName());
Assert.assertEquals("", ofsPath.getMountName());
Assert.assertEquals("", ofsPath.getKeyName());
Assert.assertEquals("/volume1/bucket2", ofsPath.getNonKeyPath());
Assert.assertFalse(ofsPath.isMount());
Assert.assertEquals("/volume1/bucket2/", ofsPath.toString());
// The trailing '/' doesn't matter when parsing a bucket path
ofsPath = new OFSPath("/volume1/bucket2");
Assert.assertEquals("", ofsPath.getAuthority());
Assert.assertEquals("volume1", ofsPath.getVolumeName());
Assert.assertEquals("bucket2", ofsPath.getBucketName());
Assert.assertEquals("", ofsPath.getMountName());
Assert.assertEquals("", ofsPath.getKeyName());
Assert.assertEquals("/volume1/bucket2", ofsPath.getNonKeyPath());
Assert.assertFalse(ofsPath.isMount());
Assert.assertEquals("/volume1/bucket2/", ofsPath.toString());
}
@Test
public void testParsingVolumeOnly() {
// Volume only
OFSPath ofsPath = new OFSPath("/volume1/");
Assert.assertEquals("", ofsPath.getAuthority());
Assert.assertEquals("volume1", ofsPath.getVolumeName());
Assert.assertEquals("", ofsPath.getBucketName());
Assert.assertEquals("", ofsPath.getMountName());
Assert.assertEquals("", ofsPath.getKeyName());
Assert.assertEquals("/volume1/", ofsPath.getNonKeyPath());
Assert.assertFalse(ofsPath.isMount());
Assert.assertEquals("/volume1/", ofsPath.toString());
// The trailing '/' doesn't matter when parsing a volume path
ofsPath = new OFSPath("/volume1");
Assert.assertEquals("", ofsPath.getAuthority());
Assert.assertEquals("volume1", ofsPath.getVolumeName());
Assert.assertEquals("", ofsPath.getBucketName());
Assert.assertEquals("", ofsPath.getMountName());
Assert.assertEquals("", ofsPath.getKeyName());
// Note: currently getNonKeyPath() returns with '/' if input is volume only.
// There is no use case for this for now.
// The behavior might change in the future.
Assert.assertEquals("/volume1/", ofsPath.getNonKeyPath());
Assert.assertFalse(ofsPath.isMount());
Assert.assertEquals("/volume1/", ofsPath.toString());
}
@Test
public void testParsingWithAuthority() {
OFSPath ofsPath = new OFSPath("ofs://svc1:9876/volume1/bucket2/dir3/");
Assert.assertEquals("svc1:9876", ofsPath.getAuthority());
Assert.assertEquals("volume1", ofsPath.getVolumeName());
Assert.assertEquals("bucket2", ofsPath.getBucketName());
Assert.assertEquals("dir3/", ofsPath.getKeyName());
Assert.assertEquals("/volume1/bucket2", ofsPath.getNonKeyPath());
Assert.assertFalse(ofsPath.isMount());
Assert.assertEquals("ofs://svc1:9876/volume1/bucket2/dir3/",
ofsPath.toString());
}
@Test
public void testParsingMount() {
String bucketName;
try {
bucketName = OFSPath.getTempMountBucketNameOfCurrentUser();
} catch (IOException ex) {
Assert.fail("Failed to get the current user name, "
+ "thus failed to get temp bucket name.");
bucketName = ""; // Make javac happy
}
// Mount only
OFSPath ofsPath = new OFSPath("/tmp/");
Assert.assertEquals("", ofsPath.getAuthority());
Assert.assertEquals(
OFSPath.OFS_MOUNT_TMP_VOLUMENAME, ofsPath.getVolumeName());
Assert.assertEquals(bucketName, ofsPath.getBucketName());
Assert.assertEquals("tmp", ofsPath.getMountName());
Assert.assertEquals("", ofsPath.getKeyName());
Assert.assertEquals("/tmp", ofsPath.getNonKeyPath());
Assert.assertTrue(ofsPath.isMount());
Assert.assertEquals("/tmp/", ofsPath.toString());
// Mount with key
ofsPath = new OFSPath("/tmp/key1");
Assert.assertEquals("", ofsPath.getAuthority());
Assert.assertEquals(
OFSPath.OFS_MOUNT_TMP_VOLUMENAME, ofsPath.getVolumeName());
Assert.assertEquals(bucketName, ofsPath.getBucketName());
Assert.assertEquals("tmp", ofsPath.getMountName());
Assert.assertEquals("key1", ofsPath.getKeyName());
Assert.assertEquals("/tmp", ofsPath.getNonKeyPath());
Assert.assertTrue(ofsPath.isMount());
Assert.assertEquals("/tmp/key1", ofsPath.toString());
}
}