Package com.alibaba.citrus.service.resource.loader

Source Code of com.alibaba.citrus.service.resource.loader.FileLoaderTests

/*
* Copyright 2010 Alibaba Group Holding Limited.
* All rights reserved.
*
* Licensed 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 com.alibaba.citrus.service.resource.loader;

import static com.alibaba.citrus.service.resource.ResourceLoadingService.*;
import static com.alibaba.citrus.test.TestEnvStatic.*;
import static com.alibaba.citrus.test.TestUtil.*;
import static org.junit.Assert.*;

import java.io.File;
import java.net.URL;

import org.junit.Assert;
import org.junit.Test;

import com.alibaba.citrus.service.resource.Resource;
import com.alibaba.citrus.service.resource.ResourceLister;
import com.alibaba.citrus.service.resource.loader.FileResourceLoader.SearchPath;

public class FileLoaderTests extends AbstractResourceLoaderTests<FileResourceLoader> {
    @Test
    public void searchPath_wrong() {
        try {
            new SearchPath(null, true);
            fail();
        } catch (IllegalArgumentException e) {
            assertThat(e, exception("path"));
        }

        // relpath.init(null)
        SearchPath path = new SearchPath("abc", true);

        try {
            path.init(null);
            fail();
        } catch (IllegalArgumentException e) {
            assertThat(
                    e,
                    exception("Could not get basedir for search path: ", "relpath=abc, basedir=null.  ",
                            "Please set basedir explictly at file-loader or use absolute path instead"));
        }
    }

    @Test
    public void searchPath_toString() {
        // relpath without basedir
        SearchPath path = new SearchPath("abc", true);
        assertEquals("relpath=abc, basedir=null", path.toString());

        // relpath with basedir
        path.init(srcdir.getAbsolutePath());
        assertThat(path.toString(), containsAll("relpath=abc, basedir=", "config"));

        // abspath
        path = new SearchPath("abc", false);
        assertEquals("abspath=abc", path.toString());

        // abspath.init(srcdir) - no effect
        path.init(srcdir.getAbsolutePath());
        assertEquals("abspath=abc", path.toString());
    }

    @Test
    public void searchPath_default() throws Exception {
        try {
            createLoader(null, null);
            fail();
        } catch (IllegalArgumentException e) {
            assertThat(
                    e,
                    exception("Could not get basedir for search path: ", "relpath=/, basedir=null.  ",
                            "Please set basedir explictly at file-loader or use absolute path instead"));
        }

        // basedir
        createLoader(srcdir.getAbsolutePath(), null);

        assertEquals(1, loader.getPaths().length);
        assertThat(loader.getPaths()[0].toString(), containsAll("relpath=/, basedir=", "config"));

        // configURL
        createLoader(null, new File(srcdir, "aaa/config.xml").toURI().toURL());

        assertEquals(1, loader.getPaths().length);
        assertThat(loader.getPaths()[0].toString(), containsAll("relpath=/, basedir=", "config/aaa"));
    }

    @Test
    public void basedir_noConfigURL() throws Exception {
        createLoader(srcdir.getAbsolutePath(), // srcdir
                null, //
                new SearchPath("WEB-INF", true), // srcdir/WEB-INF
                new SearchPath(new File(srcdir, "aaa").getAbsolutePath(), false)); // srcdir/aaa

        assertEquals(2, loader.getPaths().length);
        assertThat(loader.getPaths()[0].toString(), containsAll("relpath=WEB-INF, basedir=", "config"));
        assertThat(loader.getPaths()[1].toString(), containsAll("abspath=", "config/aaa"));
    }

    @Test
    public void basedir_abs() throws Exception {
        createLoader(srcdir.getAbsolutePath(), // srcdir
                new File(srcdir, "aaa/config.xml").toURI().toURL(), // srcdir/aaa
                new SearchPath("WEB-INF", true), // srcdir/WEB-INF
                new SearchPath(new File(srcdir, "aaa").getAbsolutePath(), false)); // srcdir/aaa

        assertEquals(2, loader.getPaths().length);
        assertThat(loader.getPaths()[0].toString(), containsAll("relpath=WEB-INF, basedir=", "config"));
        assertThat(loader.getPaths()[1].toString(), containsAll("abspath=", "config/aaa"));
    }

    @Test
    public void basedir_rel() throws Exception {
        createLoader("..", // srcdir/aaa/..
                new File(srcdir, "aaa/config.xml").toURI().toURL(), // srcdir/aaa
                new SearchPath("WEB-INF", true), // srcdir/WEB-INF
                new SearchPath(new File(srcdir, "aaa").getAbsolutePath(), false)); // srcdir/aaa

        assertEquals(2, loader.getPaths().length);
        assertThat(loader.getPaths()[0].toString(), containsAll("relpath=WEB-INF, basedir=", "config"));
        assertThat(loader.getPaths()[1].toString(), containsAll("abspath=", "config/aaa"));
    }

    @Test
    public void basedir_configURLonly() throws Exception {
        createLoader(null, //
                new File(srcdir, "aaa/config.xml").toURI().toURL(), // basedir=srcdir/aaa
                new SearchPath("../WEB-INF", true), // srcdir/aaa/../WEB-INF
                new SearchPath(new File(srcdir, "aaa/bbb").getAbsolutePath(), false)); // srcdir/aaa/bbb

        assertEquals(2, loader.getPaths().length);
        assertThat(loader.getPaths()[0].toString(), containsAll("relpath=../WEB-INF, basedir=", "config/aaa"));
        assertThat(loader.getPaths()[1].toString(), containsAll("abspath=", "config/aaa/bbb"));
    }

    @Test
    public void search() throws Exception {
        createLoader(srcdir.getAbsolutePath(), null, //
                new SearchPath("WEB-INF", true), // srcdir/WEB-INF
                new SearchPath(new File(srcdir, "WEB-INF/aaa").getAbsolutePath(), false)); // srcdir/aaa

        // getResource
        assertResourceLoader("/myapp/", "WEB-INF", true); // dir
        assertResourceLoader("/myapp/web.xml", "WEB-INF/web.xml", true);
        assertResourceLoader("/myapp/bbb/abc.txt", "WEB-INF/aaa/bbb/abc.txt", true);

        // list
        assertResourceLister("/myapp/", "WEB-INF", true, "aaa/", "resources.xml", "web.xml");
        assertResourceLister("/myapp/web.xml", null, false);
        assertResourceLister("/myapp/bbb/abc.txt", null, false);
    }

    @Test
    public void search2() throws Exception {
        createLoader(null, new File(srcdir, "aaa/config.xml").toURI().toURL(), // basedir=srcdir/aaa
                new SearchPath("../WEB-INF", true), // srcdir/aaa/../WEB-INF
                new SearchPath(new File(srcdir, "WEB-INF/aaa/bbb").getAbsolutePath(), false)); // srcdir/aaa/bbb

        // getResource
        assertResourceLoader("/myapp/", "WEB-INF", true); // dir
        assertResourceLoader("/myapp/web.xml", "WEB-INF/web.xml", true);
        assertResourceLoader("/myapp/abc.txt", "WEB-INF/aaa/bbb/abc.txt", true);

        // list
        assertResourceLister("/myapp/", "WEB-INF", true, "aaa/", "resources.xml", "web.xml");
        assertResourceLister("/myapp/web.xml", null, false);
        assertResourceLister("/myapp/abc.txt", null, false);
    }

    @Test
    public void search3() throws Exception {
        createLoader(srcdir.getAbsolutePath(), null);

        // getResource
        assertResourceLoader("/myapp/WEB-INF", "WEB-INF", true); // dir
        assertResourceLoader("/myapp/WEB-INF/web.xml", "WEB-INF/web.xml", true);
        assertResourceLoader("/myapp/notfound.txt", null, false);

        // list
        assertResourceLister("/myapp/WEB-INF", "WEB-INF", true, "aaa/", "resources.xml", "web.xml");
        assertResourceLister("/myapp/WEB-INF/web.xml", null, false);
        assertResourceLister("/myapp/notfound.txt", null, false);
    }

    @Test
    public void search4() throws Exception {
        createLoader(srcdir.getAbsolutePath(), null, //
                new SearchPath("WEB-INF", true), // srcdir/WEB-INF
                new SearchPath(new File(srcdir, "WEB-INF/aaa").getAbsolutePath(), false), // srcdir/WEB-INF/aaa
                new SearchPath(new File(srcdir, "WEB-INF/aaa/ccc").getAbsolutePath(), false)); // srcdir/WEB-INF/aaa/ccc

        // getResource
        //----------------------------------------------------------------------------------
        // (1) without FOR_CREATE option
        assertResourceLoader("/myapp/def.txt", "WEB-INF/aaa/ccc/def.txt", true);

        // (2) with FOR_CREATE option
        assertResourceLoader("/myapp/def.txt", "WEB-INF/aaa/ccc/def.txt", true, FOR_CREATE);

        // (3) without FOR_CREATE option
        Resource resource = loader.getResource(new MyContext("/myapp/ghi.txt"), null);
        Assert.assertNull(resource);

        // (4) with FOR_CREATE option
        resource = loader.getResource(new MyContext("/myapp/ghi.txt"), FOR_CREATE);
        Assert.assertNotNull(resource);
        assertTrue(!resource.exists());
    }

    @Test
    public void empty_dir() throws Exception {
        new File(destdir, "emptyDir").mkdirs();
        createLoader(destdir.getAbsolutePath(), null);

        String[] names = ((ResourceLister) loader).list(new MyContext("/myapp/emptyDir"), null);
        assertArrayEquals(new String[0], names);
    }

    @Test
    public void _toString() {
        createLoader(srcdir.getAbsolutePath(), null, //
                new SearchPath("WEB-INF", true), // srcdir/WEB-INF
                new SearchPath(new File(srcdir, "aaa").getAbsolutePath(), false)); // srcdir/aaa

        assertThat(loader.toString(),
                containsAll("FileResourceLoader [", "relpath=WEB-INF, basedir=", "abspath=", "config/aaa", "]"));
    }

    private void createLoader(String basedir, URL configURL, SearchPath... paths) {
        loader = new FileResourceLoader();

        if (basedir != null) {
            loader.setBasedir(basedir);
        }

        if (configURL != null) {
            loader.setConfigFileURL(configURL);
        }

        loader.setPaths(paths);
        loader.init(null);
    }

    @Override
    protected String getPrefix() {
        return "myapp";
    }
}
TOP

Related Classes of com.alibaba.citrus.service.resource.loader.FileLoaderTests

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.