ddf.mime.mapper.MimeTypeMapperTest.java Source code

Java tutorial

Introduction

Here is the source code for ddf.mime.mapper.MimeTypeMapperTest.java

Source

/**
 * Copyright (c) Codice Foundation
 * <p>
 * This is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser
 * General Public License as published by the Free Software Foundation, either version 3 of the
 * License, or any later version.
 * <p>
 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
 * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details. A copy of the GNU Lesser General Public License
 * is distributed along with this program and can be found at
 * <http://www.gnu.org/licenses/lgpl.html>.
 */
package ddf.mime.mapper;

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

import java.io.File;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.io.FileUtils;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import ddf.mime.MimeTypeMapper;
import ddf.mime.MimeTypeResolver;
import ddf.mime.tika.TikaMimeTypeResolver;

public class MimeTypeMapperTest {
    private static final Logger LOGGER = LoggerFactory.getLogger(MimeTypeMapperTest.class);

    private static final String CSW_RECORD_FILE = "src/test/resources/csw_record.xml";

    private static final String XML_METACARD_FILE = "src/test/resources/metacard_sample.xml";

    private static final String NO_NAMESPACE_MATCHES_XML_FILE = "src/test/resources/no_namespace_matches.xml";

    private static final String NO_NAMESPACES_XML_FILE = "src/test/resources/no_namespaces.xml";

    @Test
    public void testNoResolvers() throws Exception {
        List<MimeTypeResolver> resolvers = new ArrayList<MimeTypeResolver>();

        MimeTypeMapper mapper = new MimeTypeMapperImpl(resolvers);
        String fileExtension = mapper.getFileExtensionForMimeType("image/nitf");
        LOGGER.debug("fileExtension = {}", fileExtension);
        assertNull(fileExtension);
    }

    @Test
    public void testSingleResolver() throws Exception {
        List<MimeTypeResolver> resolvers = new ArrayList<MimeTypeResolver>();
        resolvers.add(new MockMimeTypeResolver("Resolver_1", 10));

        MimeTypeMapper mapper = new MimeTypeMapperImpl(resolvers);
        String fileExtension = mapper.getFileExtensionForMimeType("image/nitf");
        LOGGER.debug("fileExtension = {}", fileExtension);
        assertEquals(".nitf", fileExtension);
    }

    @Test
    public void testMultipleResolvers() throws Exception {
        List<MimeTypeResolver> resolvers = new ArrayList<MimeTypeResolver>();
        resolvers.add(new MockMimeTypeResolver("Resolver_1", 10));
        resolvers.add(new MockMimeTypeResolver("Resolver_2", -1));
        resolvers.add(new MockMimeTypeResolver("Resolver_3", 100));

        MimeTypeMapper mapper = new MimeTypeMapperImpl(resolvers);
        String fileExtension = mapper.getFileExtensionForMimeType("image/nitf");
        LOGGER.debug("fileExtension = {}", fileExtension);
        assertEquals(".nitf", fileExtension);
    }

    @Test
    public void testGuessMimeTypeForXmlIngest() throws Exception {

        List<MimeTypeResolver> resolvers = new ArrayList<MimeTypeResolver>();
        resolvers.add(new MockMimeTypeResolver("NitfResolver", 10,
                new String[] { "nitf=image/nitf", "ntf=image/nitf" }, null));
        resolvers.add(new MockMimeTypeResolver("XmlMetacardResolver", 10, new String[] { "xml=text/xml" },
                "urn:catalog:metacard"));
        resolvers.add(new MockMimeTypeResolver("CswResolver", 10, new String[] { "xml=text/xml;id=csw" },
                "http://www.opengis.net/cat/csw/2.0.2"));
        TikaMimeTypeResolver tikaMimeTypeResolver = new TikaMimeTypeResolver();
        tikaMimeTypeResolver.setPriority(-1);
        resolvers.add(tikaMimeTypeResolver);

        MimeTypeMapper mapper = new MimeTypeMapperImpl(resolvers);

        InputStream is = FileUtils.openInputStream(new File(CSW_RECORD_FILE));
        String mimeType = mapper.guessMimeType(is, "xml");
        LOGGER.debug("mimeType = {}", mimeType);
        assertEquals("text/xml;id=csw", mimeType);

        is = FileUtils.openInputStream(new File(XML_METACARD_FILE));
        mimeType = mapper.guessMimeType(is, "xml");
        LOGGER.debug("mimeType = {}", mimeType);
        assertEquals("text/xml", mimeType);

        // Verify an XML file with a root element namespace, e.g., a pom.xml file, that does not match any
        // MimeTypeResolver returns a null mime type
        is = FileUtils.openInputStream(new File(NO_NAMESPACE_MATCHES_XML_FILE));
        mimeType = mapper.guessMimeType(is, "xml");
        LOGGER.debug("mimeType = {}", mimeType);
        assertNull(mimeType);

        // Verify an XML file with no namespaces that does not match any
        // MimeTypeResolver returns a null mime type
        is = FileUtils.openInputStream(new File(NO_NAMESPACES_XML_FILE));
        mimeType = mapper.guessMimeType(is, "xml");
        LOGGER.debug("mimeType = {}", mimeType);
        assertNull(mimeType);
    }

}