Package org.apache.sling.mailarchiveserver.impl

Source Code of org.apache.sling.mailarchiveserver.impl.MessageStoreImplRepositoryTestUtil

/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License.  You may obtain a copy of the License at
*
*   http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied.  See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.sling.mailarchiveserver.impl;

import static org.apache.sling.mailarchiveserver.impl.MessageStoreImpl.getDomainNodeName;
import static org.apache.sling.mailarchiveserver.impl.MessageStoreImpl.getListNodeName;
import static org.apache.sling.mailarchiveserver.impl.MessageStoreImpl.makeJcrFriendly;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

import org.apache.james.mime4j.dom.Header;
import org.apache.james.mime4j.dom.Message;
import org.apache.james.mime4j.stream.Field;
import org.apache.sling.api.resource.ModifiableValueMap;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ValueMap;

public class MessageStoreImplRepositoryTestUtil {

    private static final String TEST_FILE_FIELD_SEPARATOR = " : ";

    /**
     * Code is taken from http://svn.apache.org/repos/asf/sling/trunk/launchpad/test-services/src/main/java/org/apache/sling/launchpad/testservices/serversidetests/WriteableResourcesTest.java
     */
    static void assertValueMap(ValueMap m, String ... keyValue) {
        assertNotNull("Expecting non-null ValueMap", m);
        for(int i=0 ; i< keyValue.length; i+=2) {
            final String key = keyValue[i];
            final String value = keyValue[i+1];
            assertEquals("Expecting " + key + "=" + value, value, m.get(key, String.class));
        }
    }

    static String readTextFile(File bodyFile) throws FileNotFoundException {
        Scanner sc = null;
        try {
            sc = new Scanner(bodyFile);
            String expectedBody = "";
            while (sc.hasNextLine()) {
                expectedBody += sc.nextLine() + "\n";
            }
            expectedBody = expectedBody.substring(0, expectedBody.length()-1);
            return expectedBody;
        } finally {
            if (sc != null) {
                sc.close();
            }
        }
    }

    static String specialPathFromFilePath(String fpath, String suffix, String ext) {
        int dotIdx = fpath.lastIndexOf(".");
        String bodyPath = fpath.substring(0, dotIdx) + suffix + "." + ext;
        return bodyPath;
    }

    static String specialPathFromFilePath(String fpath, String suffix) {
        int dotIdx = fpath.lastIndexOf(".");
        return specialPathFromFilePath(fpath, suffix, fpath.substring(dotIdx + 1));
    }

    static String getResourcePath(Message msg, MessageStoreImpl store) {
        final Header hdr = msg.getHeader();
        final String listIdRaw = hdr.getField("List-Id").getBody();
        final String listId = listIdRaw.substring(1, listIdRaw.length()-1); // remove < and >

        String msgId;
        final Field msgIdField = hdr.getField("Message-ID");
        if (msgIdField != null) {
            msgId = msgIdField.getBody();
            msgId = msgId.substring(1, msgId.length()-1);
        } else {
            msgId = Integer.toHexString(hdr.getField("Date").hashCode());
        }
        msgId = makeJcrFriendly(msgId);

        String subject = null;
        final Field subjectField = hdr.getField("Subject");
        if (subjectField != null) {
            subject = subjectField.getBody();
        }

        String threadPath = store.threadKeyGen.getThreadKey(subject);
        String path = store.archivePath + getDomainNodeName(listId) + "/" + getListNodeName(listId) +
                "/" + threadPath + "/" + msgId;
        return path;
    }

    static void assertHeaders(File headersFile, ModifiableValueMap m) throws FileNotFoundException {
        Map<String, List<String>> expectedHeaders = new HashMap<String, List<String>>();
        Scanner sc = new Scanner(headersFile);
        while (sc.hasNextLine()) {
            String line = sc.nextLine();
            if (line.startsWith("//"))
                continue;
            String[] colon = line.split(TEST_FILE_FIELD_SEPARATOR);
            String header = colon[0];
            String value = colon[1];
            List<String> values;
            if ((values = expectedHeaders.get(header)) == null) {
                values = new ArrayList<String>();
                expectedHeaders.put(header, values);
            }
            values.add(value);
        }
        sc.close();

        assertEquals("Expecting same number of headers", m.keySet().size()-2, expectedHeaders.keySet().size());
        // -1 for Body (should be no htmlBody)
        // -1 for X-original-header

        for (String expectedHeader : expectedHeaders.keySet()) {
            assertTrue("Expecting header \""+expectedHeader+"\" to exist", m.containsKey(expectedHeader));
            String values = m.get(expectedHeader, String.class);
            for (String expectedValue : expectedHeaders.get(expectedHeader)) {
                assertTrue("Expecting header \""+expectedHeader+"\" to contain the value", values.contains(expectedValue));
            }
        }
    }

    static void assertLayer(Resource root, List<String> types, int depth) {
        for (Resource child : root.getChildren()) {
            final ModifiableValueMap m = child.adaptTo(ModifiableValueMap.class);
            if (m.keySet().contains(MessageStoreImplRepositoryTest.TEST_RT_KEY)) {
                String type = m.get(MessageStoreImplRepositoryTest.TEST_RT_KEY, String.class);
                assertEquals(String.format("Expecting %s to have %s type", child.getPath(), types.get(depth)), types.get(depth), type);
            }
            if (child.getChildren().iterator().hasNext()) {
                assertLayer(child, types, depth+1);
            }
        }

    }

}
TOP

Related Classes of org.apache.sling.mailarchiveserver.impl.MessageStoreImplRepositoryTestUtil

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.