/*
* Copyright (C) 2005-2010 Alfresco Software Limited.
*
* This file is part of Alfresco
*
* Alfresco 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
* (at your option) any later version.
*
* Alfresco 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.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Alfresco. If not, see .
*/
package org.alfresco.repo.avm;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import org.alfresco.config.JNDIConstants;
import org.alfresco.model.ContentModel;
import org.alfresco.model.WCMModel;
import org.alfresco.repo.action.ActionImpl;
import org.alfresco.repo.avm.actions.AVMRevertListAction;
import org.alfresco.repo.avm.actions.AVMRevertStoreAction;
import org.alfresco.repo.avm.actions.AVMRevertToVersionAction;
import org.alfresco.repo.avm.actions.AVMUndoSandboxListAction;
import org.alfresco.repo.avm.actions.SimpleAVMPromoteAction;
import org.alfresco.repo.avm.actions.SimpleAVMSubmitAction;
import org.alfresco.repo.avm.util.BulkLoader;
import org.alfresco.repo.content.MimetypeMap;
import org.alfresco.repo.domain.PropertyValue;
import org.alfresco.repo.search.impl.lucene.LuceneQueryParser;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.transaction.RetryingTransactionHelper;
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
import org.alfresco.service.cmr.avm.AVMBadArgumentException;
import org.alfresco.service.cmr.avm.AVMCycleException;
import org.alfresco.service.cmr.avm.AVMException;
import org.alfresco.service.cmr.avm.AVMExistsException;
import org.alfresco.service.cmr.avm.AVMNodeDescriptor;
import org.alfresco.service.cmr.avm.AVMNotFoundException;
import org.alfresco.service.cmr.avm.AVMService;
import org.alfresco.service.cmr.avm.AVMStoreDescriptor;
import org.alfresco.service.cmr.avm.LayeringDescriptor;
import org.alfresco.service.cmr.avm.VersionDescriptor;
import org.alfresco.service.cmr.avmsync.AVMDifference;
import org.alfresco.service.cmr.dictionary.DataTypeDefinition;
import org.alfresco.service.cmr.model.FileFolderService;
import org.alfresco.service.cmr.remote.RepoRemote;
import org.alfresco.service.cmr.repository.ContentData;
import org.alfresco.service.cmr.repository.ContentWriter;
import org.alfresco.service.cmr.repository.CrossRepositoryCopyService;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.StoreRef;
import org.alfresco.service.cmr.search.ResultSet;
import org.alfresco.service.cmr.search.ResultSetRow;
import org.alfresco.service.cmr.search.SearchService;
import org.alfresco.service.cmr.security.AccessPermission;
import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.namespace.QName;
import org.alfresco.service.transaction.TransactionService;
import org.alfresco.util.GUID;
import org.alfresco.util.Pair;
import org.alfresco.wcm.sandbox.SandboxConstants;
/**
* Big test of AVM behavior.
*
* @author britt
*/
public class AVMServiceTest extends AVMServiceTestBase
{
public void testSetup() throws Exception
{
super.testSetup();
}
public void testSetupAndQueriesAgainstBasicTree() throws Exception
{
setupBasicTree();
runQueriesAgainstBasicTree("main");
}
public void testDiffOrder() throws IOException
{
try
{
fService.createStore("Bottom");
fService.createStore("Top");
fService.createDirectory("Bottom:/", "www");
fService.createLayeredDirectory("Bottom:/www", "Top:/", "www");
fService.createFile("Bottom:/www", "newInBottom").close();
fService.createSnapshot("Bottom", null, null);
fService.createFile("Top:/www", "newInTop").close();
fService.createSnapshot("Top", null, null);
fService.createFile("Bottom:/www", "file").close();
fService.createSnapshot("Bottom", null, null);
fService.forceCopy("Top:/www/file");
fService.createSnapshot("Top", null, null);
fService.forceCopy("Bottom:/www/file");
fService.createSnapshot("Bottom", null, null);
List diffs = fSyncService.compare(-1, "Top:/", -1, "Bottom:/", null);
assertEquals(
2, diffs.size());
Collections.sort(diffs);
AVMDifference last = null;
for(AVMDifference current : diffs)
{
if(last != null)
{
assert(last.getOrderValue() < current.getOrderValue());
}
last = current;
}
diffs.add(new AVMDifference(1, null, -1, null, 0));
diffs.add(new AVMDifference(1, null, -1, null, 1));
diffs.add(new AVMDifference(1, null, -1, null, 2));
diffs.add(new AVMDifference(1, null, -1, null, 3));
diffs.add(new AVMDifference(1, null, -1, null, 4));
diffs.add(new AVMDifference(1, null, -1, null, 5));
diffs.add(new AVMDifference(1, null, -1, null, 6));
Collections.sort(diffs);
last = null;
for(AVMDifference current : diffs)
{
if(last != null)
{
assert(last.getOrderValue() < current.getOrderValue());
}
last = current;
}
}
finally
{
fService.purgeStore("Bottom");
fService.purgeStore("Top");
}
}
public void test_ETWOTWO_570() throws Exception
{
// Check that read-write methods are properly intercepted
RetryingTransactionCallback