/*
* (C) Copyright 2010 Nuxeo SA (http://nuxeo.com/) and others.
*
* 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.
*
* Contributors:
* Nuxeo - initial API and implementation
*/
package org.nuxeo.ecm.admin.repo.tests;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.io.Serializable;
import javax.inject.Inject;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.nuxeo.ecm.admin.repo.RepoStat;
import org.nuxeo.ecm.admin.repo.RepoStatInfo;
import org.nuxeo.ecm.admin.runtime.RuntimeInstrospection;
import org.nuxeo.ecm.admin.runtime.SimplifiedServerInfo;
import org.nuxeo.ecm.core.api.Blob;
import org.nuxeo.ecm.core.api.Blobs;
import org.nuxeo.ecm.core.api.CoreSession;
import org.nuxeo.ecm.core.api.DocumentModel;
import org.nuxeo.ecm.core.api.DocumentModelList;
import org.nuxeo.ecm.core.api.PathRef;
import org.nuxeo.ecm.core.api.VersioningOption;
import org.nuxeo.ecm.core.api.facet.VersioningDocument;
import org.nuxeo.ecm.core.versioning.VersioningService;
import org.nuxeo.ecm.platform.test.PlatformFeature;
import org.nuxeo.runtime.test.runner.Features;
import org.nuxeo.runtime.test.runner.FeaturesRunner;
import org.nuxeo.runtime.transaction.TransactionHelper;
@RunWith(FeaturesRunner.class)
@Features(PlatformFeature.class)
public class TestRepoStats {
@Inject
protected CoreSession session;
protected RepoStatInfo runRepoStatSync() throws Exception {
RepoStat runningStat = new RepoStat(session.getRepositoryName(), 5, true);
runningStat.run(new PathRef("/"));
Thread.sleep(400);
while (runningStat.isRunning()) {
Thread.sleep(100);
}
return runningStat.getInfo();
}
@Test
public void testRepoStats() throws Exception {
// stats on default template
RepoStatInfo stat1 = runRepoStatSync();
// System.out.println(stat1.toString());
assertEquals(5, stat1.getTotalNbDocs());
assertEquals(new Long(1), stat1.getDocTypeCount("Root"));
assertEquals(new Long(1), stat1.getDocTypeCount("WorkspaceRoot"));
assertEquals(new Long(1), stat1.getDocTypeCount("TemplateRoot"));
assertEquals(new Long(1), stat1.getDocTypeCount("SectionRoot"));
assertEquals(new Long(1), stat1.getDocTypeCount("Domain"));
assertEquals(0, stat1.getTotalBlobNumber());
assertEquals(0, stat1.getVersions());
DocumentModel blobDoc = session.createDocumentModel("File");
blobDoc.setPathInfo("/default-domain/workspaces/", "blobDoc");
blobDoc.setPropertyValue("dc:title", "blobDoc");
Blob blob = Blobs.createBlob("12345");
blobDoc.setPropertyValue("file:content", (Serializable) blob);
blobDoc = session.createDocument(blobDoc);
session.save();
nextTransaction();
// Add a blob Holder
RepoStatInfo stat2 = runRepoStatSync();
assertEquals(6, stat2.getTotalNbDocs());
assertEquals(1, stat2.getTotalBlobNumber());
assertEquals(5, stat2.getTotalBlobSize());
assertEquals(5, stat2.getMaxBlobSize());
assertEquals(new Long(1), stat2.getDocTypeCount("File"));
// Add a version
blobDoc.setPropertyValue("dc:title", "blobDoc2"); // make a change to make the doc dirty and also create a
// snapshot
blobDoc.putContextData(VersioningService.VERSIONING_OPTION, VersioningOption.MAJOR);
blobDoc = session.saveDocument(blobDoc);
session.save();
// check that version has been created
DocumentModelList docs = session.query("select * from File");
assertEquals(2, docs.size());
nextTransaction();
RepoStatInfo stat3 = runRepoStatSync();
// System.out.println(stat3.toString());
assertEquals(1, stat3.getVersions());
assertEquals(7, stat3.getTotalNbDocs());
assertEquals(2, stat3.getTotalBlobNumber());
assertEquals(10, stat3.getTotalBlobSize());
assertEquals(5, stat3.getMaxBlobSize());
assertEquals(new Long(2), stat3.getDocTypeCount("File"));
// modify blob
blob = Blobs.createBlob("123456789");
blobDoc.setPropertyValue("file:content", (Serializable) blob);
blobDoc = session.saveDocument(blobDoc);
session.save();
nextTransaction();
RepoStatInfo stat4 = runRepoStatSync();
// System.out.println(stat4.toString());
assertEquals(1, stat4.getVersions());
assertEquals(7, stat4.getTotalNbDocs());
assertEquals(2, stat4.getTotalBlobNumber());
assertEquals(14, stat4.getTotalBlobSize());
assertEquals(9, stat4.getMaxBlobSize());
assertEquals(Long.valueOf(2), stat4.getDocTypeCount("File"));
}
protected void nextTransaction() {
TransactionHelper.commitOrRollbackTransaction();
TransactionHelper.startTransaction();
}
@Test
public void testIntrospection() {
SimplifiedServerInfo info = RuntimeInstrospection.getInfo();
assertNotNull(info);
// System.out.print(info.toString());
}
}