blob: 7ccfa16c83583c884738d9828cc4d3b434a4590c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2015, 2016 Ericsson
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License 2.0 which
* accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Patrick Tasse - Initial API and implementation
*******************************************************************************/
package org.eclipse.tracecompass.statesystem.core.tests;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import org.eclipse.tracecompass.internal.statesystem.core.AttributeTree;
import org.eclipse.tracecompass.internal.statesystem.core.StateSystem;
import org.eclipse.tracecompass.statesystem.core.ITmfStateSystem;
import org.eclipse.tracecompass.statesystem.core.backend.IStateHistoryBackend;
import org.eclipse.tracecompass.statesystem.core.backend.StateHistoryBackendFactory;
import org.junit.Test;
/**
* Test the {@link AttributeTree} class
*
* @author Patrick Tasse
*/
public class AttributeTreeTest {
private static final String THREADS = "Threads";
private static final String[] NAMES = {
"", // ''
"\0", // 'Null'
"a", // 'a'
"\"", // '"'
"/", // '/'
"\\", // '\'
"ab", // 'ab'
"\"\"", // '""'
"a/", // 'a/'
"a\\", // 'a\'
"/a", // '/a'
"//", // '//'
"/\\", // '/\'
"\\a", // '\a'
"\\/", // '\/'
"\\\\", // '\\'
"abc", // 'abc'
"\"/\"", // '"/"'
"ab/", // 'ab/'
"ab\\", // 'ab\'
"a/b", // 'a/b'
"a//", // 'a//'
"a/\\", // 'a/\'
"a\\b", // 'a\b'
"a\\/", // 'a\/'
"a\\\\", // 'a\\'
"/ab", // '/ab'
"/a/", // '/a/'
"/a\\", // '/a\'
"//a", // '//a'
"///", // '///'
"//\\", // '//\'
"/\\a", // '/\a'
"/\\/", // '/\/'
"/\\\\", // '/\\'
"\\ab", // '\ab'
"\\a/", // '\a/'
"\\a\\", // '\a\'
"\\/a", // '\/a'
"\\//", // '\//'
"\\/\\", // '\/\'
"\\\\a", // '\\a'
"\\\\/", // '\\/'
"\\\\\\" // '\\\'
};
private static final String STATUS = "Status";
/**
* Test attribute tree file storage.
* <p>
* Tests that an attribute tree written to file is read back correctly.
* <p>
* Tests {@link AttributeTree#writeSelf(File, long)} and
* {@link AttributeTree#AttributeTree(StateSystem, FileInputStream)}.
*
* @throws IOException
* if there is an error accessing the test file
*/
@Test
public void testAttributeTreeFileStorage() throws IOException {
File file = File.createTempFile("AttributeTreeTest", ".ht");
IStateHistoryBackend backend1 = StateHistoryBackendFactory.createNullBackend("test");
StateSystem ss1 = new StateSystem(backend1);
AttributeTree attributeTree1 = new AttributeTree(ss1);
for (String name : NAMES) {
String[] path = new String[] { THREADS, name, STATUS };
attributeTree1.getQuarkAndAdd(-1, path);
}
attributeTree1.writeSelf(file, 0L);
ss1.dispose();
IStateHistoryBackend backend2 = StateHistoryBackendFactory.createNullBackend("test");
StateSystem ss2 = new StateSystem(backend2);
try (FileInputStream fis = new FileInputStream(file)) {
AttributeTree attributeTree2 = new AttributeTree(ss2, fis);
for (String name : NAMES) {
String[] path = new String[] { THREADS, name, STATUS };
int quark = attributeTree2.getQuarkDontAdd(ITmfStateSystem.ROOT_ATTRIBUTE, path);
assertNotEquals(ITmfStateSystem.INVALID_ATTRIBUTE, quark);
assertArrayEquals(path, attributeTree2.getFullAttributePathArray(quark));
assertEquals(name, attributeTree2.getAttributeName(attributeTree2.getParentAttributeQuark(quark)));
}
} finally {
ss2.dispose();
file.delete();
}
}
}