diff options
Diffstat (limited to 'org.eclipse.mylyn.tasks.index.tests')
-rw-r--r-- | org.eclipse.mylyn.tasks.index.tests/src/org/eclipse/mylyn/internal/tasks/index/tests/TaskListIndexCorruptTest.java | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/org.eclipse.mylyn.tasks.index.tests/src/org/eclipse/mylyn/internal/tasks/index/tests/TaskListIndexCorruptTest.java b/org.eclipse.mylyn.tasks.index.tests/src/org/eclipse/mylyn/internal/tasks/index/tests/TaskListIndexCorruptTest.java new file mode 100644 index 000000000..96c6c961d --- /dev/null +++ b/org.eclipse.mylyn.tasks.index.tests/src/org/eclipse/mylyn/internal/tasks/index/tests/TaskListIndexCorruptTest.java @@ -0,0 +1,76 @@ +/******************************************************************************* + * Copyright (c) 2013 Tasktop Technologies 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: + * Tasktop Technologies - initial API and implementation + *******************************************************************************/ + +package org.eclipse.mylyn.internal.tasks.index.tests; + +import static org.junit.Assert.assertTrue; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.util.Random; + +import org.eclipse.mylyn.tasks.core.ITask; +import org.junit.Test; + +public class TaskListIndexCorruptTest extends AbstractTaskListIndexTest { + + private void setupCorruptIndex() throws Exception { + setupIndex(); + context.createLocalTask(); + index.waitUntilIdle(); + + index.close(); + disposeIndex(); + + corruptIndex(); + } + + private void corruptIndex() throws IOException { + File[] files = tempDir.listFiles(); + if (files == null || files.length == 0) { + throw new IllegalStateException("index has no files"); + } + for (File file : files) { + if (file.isFile()) { + corruptFile(file); + } + } + } + + private void corruptFile(File file) throws IOException { + Random random = new Random(System.currentTimeMillis()); + long length = file.length(); + OutputStream stream = new FileOutputStream(file); + try { + byte[] bytes = new byte[1]; + for (long i = 0; i < length; ++i) { + random.nextBytes(bytes); + stream.write(bytes[0]); + } + } finally { + stream.close(); + } + } + + @Test + public void testCorrupt() throws Exception { + setupCorruptIndex(); + setupIndex(); + + ITask task = context.createLocalTask(); + + index.waitUntilIdle(); + + assertTrue(index.matches(task, task.getSummary())); + } +} |