blob: 447f65f2bd1e4087c881d86f324579346c19d719 [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
*
* 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.hadoop.fs.azure;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runners.MethodSorters;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import static org.junit.Assume.assumeNotNull;
import static org.apache.hadoop.fs.azure.integration.AzureTestUtils.cleanupTestAccount;
import static org.apache.hadoop.fs.azure.integration.AzureTestUtils.readStringFromFile;
import static org.apache.hadoop.fs.azure.integration.AzureTestUtils.writeStringToFile;
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
/**
* Because FileSystem.Statistics is per FileSystem, so statistics can not be ran in
* parallel, hence in this test file, force them to run in sequential.
*/
public class ITestNativeFileSystemStatistics extends AbstractWasbTestWithTimeout{
@Test
public void test_001_NativeAzureFileSystemMocked() throws Exception {
AzureBlobStorageTestAccount testAccount = AzureBlobStorageTestAccount.createMock();
assumeNotNull(testAccount);
testStatisticsWithAccount(testAccount);
}
@Test
public void test_002_NativeAzureFileSystemPageBlobLive() throws Exception {
Configuration conf = new Configuration();
// Configure the page blob directories key so every file created is a page blob.
conf.set(AzureNativeFileSystemStore.KEY_PAGE_BLOB_DIRECTORIES, "/");
// Configure the atomic rename directories key so every folder will have
// atomic rename applied.
conf.set(AzureNativeFileSystemStore.KEY_ATOMIC_RENAME_DIRECTORIES, "/");
AzureBlobStorageTestAccount testAccount = AzureBlobStorageTestAccount.create(conf);
assumeNotNull(testAccount);
testStatisticsWithAccount(testAccount);
}
@Test
public void test_003_NativeAzureFileSystem() throws Exception {
AzureBlobStorageTestAccount testAccount = AzureBlobStorageTestAccount.create();
assumeNotNull(testAccount);
testStatisticsWithAccount(testAccount);
}
private void testStatisticsWithAccount(AzureBlobStorageTestAccount testAccount) throws Exception {
assumeNotNull(testAccount);
NativeAzureFileSystem fs = testAccount.getFileSystem();
testStatistics(fs);
cleanupTestAccount(testAccount);
}
/**
* When tests are ran in parallel, this tests will fail because
* FileSystem.Statistics is per FileSystem class.
*/
@SuppressWarnings("deprecation")
private void testStatistics(NativeAzureFileSystem fs) throws Exception {
FileSystem.clearStatistics();
FileSystem.Statistics stats = FileSystem.getStatistics("wasb",
NativeAzureFileSystem.class);
assertEquals(0, stats.getBytesRead());
assertEquals(0, stats.getBytesWritten());
Path newFile = new Path("testStats");
writeStringToFile(fs, newFile, "12345678");
assertEquals(8, stats.getBytesWritten());
assertEquals(0, stats.getBytesRead());
String readBack = readStringFromFile(fs, newFile);
assertEquals("12345678", readBack);
assertEquals(8, stats.getBytesRead());
assertEquals(8, stats.getBytesWritten());
assertTrue(fs.delete(newFile, true));
assertEquals(8, stats.getBytesRead());
assertEquals(8, stats.getBytesWritten());
}
}