| /******************************************************************************* |
| * Copyright (c) 2009, 2015 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.core.tests.resources.perf; |
| |
| import java.util.Random; |
| import junit.framework.Test; |
| import junit.framework.TestSuite; |
| import org.eclipse.core.filesystem.*; |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.core.tests.harness.FileSystemHelper; |
| import org.eclipse.core.tests.harness.PerformanceTestRunner; |
| import org.eclipse.core.tests.internal.localstore.LocalStoreTest; |
| |
| /** |
| * Automated performance tests for file system operations. |
| */ |
| public class FileSystemPerformanceTest extends LocalStoreTest { |
| |
| private static final String chars = "abcdefghijklmnopqrstuvwxyz"; |
| private static final int FILE_COUNT = 100; |
| private static final int DIR_COUNT = 25; |
| |
| private static final int OUTER = 4; |
| private static final int INNER = 1; |
| |
| private final Random random = new Random(); |
| private IFileStore baseStore; |
| |
| public String createString(int length) { |
| StringBuffer buf = new StringBuffer(length); |
| //fill the string with random characters up to the desired length |
| for (int i = 0; i < length; i++) { |
| buf.append(chars.charAt(random.nextInt(chars.length()))); |
| } |
| return buf.toString(); |
| } |
| |
| void createStructure() throws CoreException { |
| baseStore = EFS.getLocalFileSystem().getStore(FileSystemHelper.getRandomLocation(getTempDir())); |
| baseStore.mkdir(EFS.NONE, null); |
| for (int i = 0; i < DIR_COUNT; i++) { |
| IFileStore dir = baseStore.getChild(createString(8)); |
| dir.mkdir(EFS.SHALLOW, null); |
| for (int j = 0; j < FILE_COUNT; j++) { |
| IFileStore file = dir.getChild(createString(16)); |
| createFile(file, createString(16)); |
| } |
| } |
| } |
| |
| void setAttributesOnTree() throws CoreException { |
| IFileStore[] dirs = baseStore.childStores(EFS.NONE, null); |
| for (IFileStore dir : dirs) { |
| IFileStore[] files = dir.childStores(EFS.NONE, null); |
| for (IFileStore file : files) { |
| IFileInfo fileInfo = file.fetchInfo(); |
| boolean clear = fileInfo.getAttribute(EFS.ATTRIBUTE_READ_ONLY); |
| fileInfo.setAttribute(EFS.ATTRIBUTE_EXECUTABLE | EFS.ATTRIBUTE_READ_ONLY, !clear); |
| file.putInfo(fileInfo, EFS.SET_ATTRIBUTES, null); |
| } |
| } |
| } |
| |
| public void testPutFileInfo() throws CoreException { |
| createStructure(); |
| PerformanceTestRunner runner = new PerformanceTestRunner() { |
| @Override |
| protected void test() { |
| try { |
| setAttributesOnTree(); |
| } catch (Exception e) { |
| fail("Failed to set attributes during performance test", e); |
| } |
| } |
| }; |
| runner.run(this, OUTER, INNER); |
| baseStore.delete(EFS.NONE, null); |
| } |
| |
| public static Test suite() { |
| return new TestSuite(FileSystemPerformanceTest.class); |
| } |
| } |