org.pentaho.platform.repository.solution.filebased.MondrianVfsTest.java Source code

Java tutorial

Introduction

Here is the source code for org.pentaho.platform.repository.solution.filebased.MondrianVfsTest.java

Source

/*
 * Copyright 2002 - 2015 Pentaho Corporation.  All rights reserved.
 *
 * This software was developed by Pentaho Corporation and is provided under the terms
 * of the Mozilla Public License, Version 1.1, or any later version. You may not use
 * this file except in compliance with the license. If you need a copy of the license,
 * please go to http://www.mozilla.org/MPL/MPL-1.1.txt. TThe Initial Developer is Pentaho Corporation.
 *
 * Software distributed under the Mozilla Public License is distributed on an "AS IS"
 * basis, WITHOUT WARRANTY OF ANY KIND, either express or  implied. Please refer to
 * the license for the specific language governing your rights and limitations.
 */

package org.pentaho.platform.repository.solution.filebased;

import org.apache.commons.io.IOUtils;
import org.apache.commons.vfs2.FileObject;
import org.apache.commons.vfs2.FileSystemException;
import org.junit.Test;
import org.pentaho.platform.api.repository2.unified.MondrianSchemaAnnotator;

import java.io.IOException;
import java.io.InputStream;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;

public class MondrianVfsTest {

    public static final String schemaContent = "<schema>contents</schema>";
    public static final String annotationsContent = "<annotations>contents</annotations>";
    public static final String appliedContent = "<schema>annotationsapplied</schema>";

    @Test
    public void testGetsFileFromEtcMondrian() throws Exception {
        assertEquals(schemaContent, runCatalogTest("/sample", null, false));
        assertEquals(schemaContent, runCatalogTest("/foodmart", null, false));
    }

    @Test
    public void testAnnotationsAreApplied() throws Exception {
        MondrianSchemaAnnotator mondrianSchemaAnnotator = new MondrianSchemaAnnotator() {
            @Override
            public InputStream getInputStream(final InputStream inputStream,
                    final InputStream annotationsInputStream) {
                return IOUtils.toInputStream(appliedContent);
            }
        };
        assertEquals(appliedContent, runCatalogTest("/annotated", mondrianSchemaAnnotator, true));
    }

    private String runCatalogTest(final String expectedCatalog, final MondrianSchemaAnnotator annotator,
            final boolean annotationsExist) throws IOException {
        MondrianVfs vfs = new MondrianVfs() {
            @Override
            FileObject getCatalogFileObject(final String catalog, final String fileName) {
                assertEquals(expectedCatalog, catalog);
                try {
                    if (fileName.equals("schema.xml")) {
                        return FileObjectTestHelper.mockFile(schemaContent, true);
                    }
                    if (fileName.equals("annotations.xml")) {
                        return FileObjectTestHelper.mockFile(annotationsContent, annotationsExist);
                    }
                    fail("unrecognized File");
                    return null;
                } catch (FileSystemException e) {
                    fail(e.getMessage());
                    return null;
                }
            }

            @Override
            MondrianSchemaAnnotator getAnnotator() {
                return annotator;
            }
        };
        FileObject file = vfs.findFile(null, "mondrian:" + expectedCatalog, null);
        return IOUtils.toString(file.getContent().getInputStream());
    }
}