/*******************************************************************************
* Copyright (c) 2008, 2010 VMware Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* VMware Inc. - initial contribution
*******************************************************************************/
package org.eclipse.virgo.kernel.artifact.properties;
import static org.junit.Assert.*;
import static org.easymock.EasyMock.*;
import java.io.File;
import java.io.IOException;
import java.util.Set;
import org.junit.Test;
import org.osgi.service.cm.Configuration;
import org.osgi.service.cm.ConfigurationAdmin;
import org.easymock.EasyMock;
import org.eclipse.virgo.kernel.artifact.StubHashGenerator;
import org.eclipse.virgo.kernel.artifact.properties.PropertiesBridge;
import org.eclipse.virgo.repository.ArtifactDescriptor;
import org.eclipse.virgo.repository.ArtifactGenerationException;
import org.eclipse.virgo.repository.Attribute;
/**
*/
public class PropertiesBridgeTests {
@Test
public void testGeneratePropertiesFile() throws ArtifactGenerationException {
PropertiesBridge bridge = new PropertiesBridge(new StubHashGenerator(), EasyMock.createMock(ConfigurationAdmin.class));
ArtifactDescriptor result = bridge.generateArtifactDescriptor(new File("src/test/resources/properties/foo.properties"));
assertNotNull(result);
}
@Test(expected = ArtifactGenerationException.class)
public void testFileDoesNotExist() throws ArtifactGenerationException {
PropertiesBridge bridge = new PropertiesBridge(new StubHashGenerator(), EasyMock.createMock(ConfigurationAdmin.class));
File file = new File("src/test/resources/properties/not.exist.properties");
bridge.generateArtifactDescriptor(file);
}
@Test
public void testGenerateNotPropertiesFile() throws ArtifactGenerationException {
PropertiesBridge bridge = new PropertiesBridge(new StubHashGenerator(), createMock(ConfigurationAdmin.class));
ArtifactDescriptor descriptor = bridge.generateArtifactDescriptor(new File("src/test/resources/bar.noterties"));
assertNull(descriptor);
}
@Test
public void testGenerateWithFactoryPid() throws ArtifactGenerationException {
final String factoryPid = "test.factory.pid";
final String propertiesFile = "src/test/resources/properties/factoryPid.properties";
ConfigurationAdmin mockConfigAdmin = createMock(ConfigurationAdmin.class);
Configuration mockConfiguration = createMock(Configuration.class);
try {
expect(mockConfigAdmin.createFactoryConfiguration(factoryPid, null)).andReturn(mockConfiguration);
} catch (IOException e) {
fail(e.getMessage());
}
expect(mockConfiguration.getPid()).andReturn("1");
replay(mockConfigAdmin, mockConfiguration);
PropertiesBridge bridge = new PropertiesBridge(new StubHashGenerator(), mockConfigAdmin);
ArtifactDescriptor descriptor = bridge.generateArtifactDescriptor(new File(propertiesFile));
verify(mockConfigAdmin, mockConfiguration);
// asserts
assertNotNull(descriptor);
assertEquals("1", descriptor.getName());
// only expect one attribute
Set<Attribute> attrSet = descriptor.getAttribute(ConfigurationAdmin.SERVICE_FACTORYPID);
assertEquals(1, attrSet.size());
Attribute attr = attrSet.iterator().next();
assertNotNull(factoryPid, attr.getValue());
}
@Test(expected = ArtifactGenerationException.class)
public void testGenerateWithFactoryPidAndIoExceptionFromConfigAdmin() throws ArtifactGenerationException {
final String factoryPid = "test.factory.pid";
final String propertiesFile = "src/test/resources/properties/factoryPid.properties";
ConfigurationAdmin mockConfigAdmin = createMock(ConfigurationAdmin.class);
try {
expect(mockConfigAdmin.createFactoryConfiguration(factoryPid, null)).andThrow(new IOException("exception from configadmin"));
} catch (IOException e) {
// I really hate checked exceptions.
}
replay(mockConfigAdmin);
PropertiesBridge bridge = new PropertiesBridge(new StubHashGenerator(), mockConfigAdmin);
bridge.generateArtifactDescriptor(new File(propertiesFile));
verify(mockConfigAdmin);
}
@Test
public void makeSureThatServicePidIsTakenFromTheFileProvidedProperties() throws ArtifactGenerationException {
final String name = "service.pid.in.the.file";
PropertiesBridge bridge = new PropertiesBridge(new StubHashGenerator(), EasyMock.createMock(ConfigurationAdmin.class));
ArtifactDescriptor result = bridge.generateArtifactDescriptor(new File("src/test/resources/properties/with-service-pid.properties"));
assertNotNull(result);
assertEquals(name, result.getName());
}
}