/*************************GO-LICENSE-START*********************************
* Copyright 2014 ThoughtWorks, Inc.
*
* 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.
*************************GO-LICENSE-END***********************************/
package com.thoughtworks.go.util;
import java.io.File;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.List;
import com.thoughtworks.go.domain.DirectoryEntry;
import com.thoughtworks.go.domain.FolderDirectoryEntry;
import com.thoughtworks.go.domain.JobIdentifier;
import static org.hamcrest.core.Is.is;
import org.junit.After;
import static org.junit.Assert.assertThat;
import org.junit.Before;
import org.junit.Test;
public class DirectoryReaderTest {
private File testFolder;
private JobIdentifier jobIdentifier;
private String folderRoot;
@Before
public void setUp() throws IOException {
testFolder = TestFileUtil.createTempFolder("testFiles");
jobIdentifier = new JobIdentifier("pipelineName", -1, "LATEST", "stageName", "LATEST", "buildName", 123L);
folderRoot = "/" + testFolder.getName();
}
@After
public void tearDown() {
FileUtil.deleteFolder(testFolder);
}
@Test
public void shouldNotDieIfGivenBogusPath() throws Exception {
DirectoryReader reader = new DirectoryReader(jobIdentifier);
List<DirectoryEntry> entries = reader.listEntries(new File("totally bogus path!!!"), "");
assertThat(entries.size(), is(0));
}
@Test
public void shouldNotDieIfGivenBogusFile() {
DirectoryReader reader = new DirectoryReader(jobIdentifier);
List<DirectoryEntry> entries = reader.listEntries(null, "");
assertThat(entries.size(), is(0));
}
@Test
public void shouldGetFileList() throws Exception {
String filename = "text.html$%";
TestFileUtil.createTestFile(testFolder, filename);
DirectoryReader reader = new DirectoryReader(jobIdentifier);
List<DirectoryEntry> entries = reader.listEntries(testFolder, folderRoot);
assertThat(entries.size(), is(1));
assertThat(entries.get(0).getFileName(), is(filename));
assertThat(entries.get(0).getUrl(),
is("/files/pipelineName/LATEST/stageName/LATEST/buildName" + folderRoot + "/"
+ URLEncoder.encode(filename)));
}
@Test
public void shouldGetSubSubFolder() throws Exception {
TestFileUtil.createTestFile(TestFileUtil.createTestFolder(TestFileUtil.createTestFolder(testFolder, "primate"), "monkey"), "baboon.html");
DirectoryReader reader = new DirectoryReader(jobIdentifier);
List<DirectoryEntry> entries = reader.listEntries(testFolder, folderRoot);
FolderDirectoryEntry folder = (FolderDirectoryEntry) entries.get(0);
assertThat(folder.getFileName(), is("primate"));
FolderDirectoryEntry subFolder = (FolderDirectoryEntry) folder.getSubDirectory().get(0);
assertThat(subFolder.getFileName(), is("monkey"));
assertThat(subFolder.getSubDirectory().get(0).getFileName(), is("baboon.html"));
assertThat(subFolder.getSubDirectory().get(0).getUrl(),
is("/files/pipelineName/LATEST/stageName/LATEST/buildName"
+ folderRoot + "/primate/monkey/baboon.html"));
}
@Test
public void shouldGetListOfFilesAndFolders() throws Exception {
TestFileUtil.createTestFile(testFolder, "text.html");
File subFolder = TestFileUtil.createTestFolder(testFolder, "primate");
TestFileUtil.createTestFile(subFolder, "baboon.html");
DirectoryReader reader = new DirectoryReader(jobIdentifier);
List<DirectoryEntry> entries = reader.listEntries(testFolder, folderRoot);
assertThat(entries.size(), is(2));
FolderDirectoryEntry folder = (FolderDirectoryEntry) entries.get(0);
assertThat(folder.getFileName(), is("primate"));
assertThat(folder.getUrl(), is("/files/pipelineName/LATEST/stageName/LATEST/buildName"
+ folderRoot + "/primate"));
assertThat(entries.get(1).getFileName(), is("text.html"));
assertThat(folder.getSubDirectory().get(0).getFileName(), is("baboon.html"));
assertThat(folder.getSubDirectory().get(0).getUrl(),
is("/files/pipelineName/LATEST/stageName/LATEST/buildName" + folderRoot + "/primate/baboon.html"));
}
@Test
public void shouldGetListOfFilesWithDirectoriesFirstAndFilesInAlphabeticOrder() throws Exception {
TestFileUtil.createTestFile(testFolder, "build.html");
File subFolder = TestFileUtil.createTestFolder(testFolder, "testoutput");
TestFileUtil.createTestFile(subFolder, "baboon.html");
TestFileUtil.createTestFile(subFolder, "apple.html");
TestFileUtil.createTestFile(subFolder, "pear.html");
DirectoryReader reader = new DirectoryReader(jobIdentifier);
List<DirectoryEntry> entries = reader.listEntries(testFolder, folderRoot);
assertThat(entries.size(), is(2));
FolderDirectoryEntry folder = (FolderDirectoryEntry) entries.get(0);
assertThat(folder.getFileName(), is("testoutput"));
assertThat(entries.get(1).getFileName(), is("build.html"));
assertThat(folder.getSubDirectory().get(0).getFileName(), is("apple.html"));
assertThat(folder.getSubDirectory().get(1).getFileName(), is("baboon.html"));
assertThat(folder.getSubDirectory().get(2).getFileName(), is("pear.html"));
}
@Test
public void shouldNotContainSerializedObjectFile() throws Exception {
String filename = ".log200806041535.xml.ser";
TestFileUtil.createTestFile(testFolder, filename);
DirectoryReader reader = new DirectoryReader(jobIdentifier);
List<DirectoryEntry> entries = reader.listEntries(testFolder, folderRoot);
assertThat(entries.size(), is(0));
}
@Test public void shouldKeepRootsInUrl() throws Exception {
File b = TestFileUtil.createTestFolder(testFolder, "b");
TestFileUtil.createTestFile(b, "c.xml");
List<DirectoryEntry> entries = new DirectoryReader(jobIdentifier).listEntries(b, folderRoot + "/b");
assertThat(entries.size(), is(1));
String expectedUrl = "/files/pipelineName/LATEST/stageName/LATEST/buildName/"
+ testFolder.getName() + "/b/c.xml";
assertThat(entries.get(0).getUrl(), is(expectedUrl));
}
}