Skip to content

Commit

Permalink
Allow Rack servers to announce
Browse files Browse the repository at this point in the history
  • Loading branch information
electrum committed Apr 14, 2012
1 parent fadb66b commit b1ead67
Show file tree
Hide file tree
Showing 7 changed files with 143 additions and 3 deletions.
34 changes: 34 additions & 0 deletions rack/src/main/java/com/proofpoint/rack/RackAnnouncer.java
Original file line number Original file line Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.proofpoint.rack;

import com.google.inject.Inject;
import com.proofpoint.discovery.client.AnnouncementHttpServerInfo;
import com.proofpoint.discovery.client.Announcer;
import com.proofpoint.discovery.client.ServiceAnnouncement;

import static com.proofpoint.discovery.client.ServiceAnnouncement.ServiceAnnouncementBuilder;
import static com.proofpoint.discovery.client.ServiceAnnouncement.serviceAnnouncement;

public class RackAnnouncer
{
@Inject
public RackAnnouncer(RackServletConfig config, Announcer announcer, AnnouncementHttpServerInfo httpServerInfo)
{
if (config.getServiceAnnouncement() != null) {
announcer.addServiceAnnouncement(createHttpAnnouncement(httpServerInfo, config.getServiceAnnouncement()));
}
}

private static ServiceAnnouncement createHttpAnnouncement(AnnouncementHttpServerInfo httpServerInfo, String announcement)
{
ServiceAnnouncementBuilder builder = serviceAnnouncement(announcement);
if (httpServerInfo.getHttpUri() != null) {
builder.addProperty("http", httpServerInfo.getHttpUri().toString());
builder.addProperty("http-external", httpServerInfo.getHttpExternalUri().toString());
}
if (httpServerInfo.getHttpsUri() != null) {
builder.addProperty("https", httpServerInfo.getHttpsUri().toString());
builder.addProperty("https-external", httpServerInfo.getHttpsExternalUri().toString());
}
return builder.build();
}
}
3 changes: 3 additions & 0 deletions rack/src/main/java/com/proofpoint/rack/RackModule.java
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -35,7 +35,10 @@ public void configure(Binder binder)
binder.disableCircularProxies(); binder.disableCircularProxies();


binder.bind(Servlet.class).annotatedWith(TheServlet.class).to(RackServlet.class).in(Scopes.SINGLETON); binder.bind(Servlet.class).annotatedWith(TheServlet.class).to(RackServlet.class).in(Scopes.SINGLETON);

ConfigurationModule.bindConfig(binder).to(RackServletConfig.class); ConfigurationModule.bindConfig(binder).to(RackServletConfig.class);

binder.bind(RackAnnouncer.class).asEagerSingleton();
} }


/** /**
Expand Down
16 changes: 16 additions & 0 deletions rack/src/main/java/com/proofpoint/rack/RackServletConfig.java
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -19,11 +19,13 @@
import com.proofpoint.configuration.ConfigDescription; import com.proofpoint.configuration.ConfigDescription;


import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;


public class RackServletConfig public class RackServletConfig
{ {
//Defaults to assuming config.ru is in the root. //Defaults to assuming config.ru is in the root.
private String rackConfigPath = "config.ru"; private String rackConfigPath = "config.ru";
private String serviceAnnouncement;


@NotNull @NotNull
public String getRackConfigPath() public String getRackConfigPath()
Expand All @@ -38,4 +40,18 @@ public RackServletConfig setRackConfigPath(String rackConfigPath)
this.rackConfigPath = rackConfigPath; this.rackConfigPath = rackConfigPath;
return this; return this;
} }

@Pattern(regexp = "[a-z][a-z0-9]{0,14}")
public String getServiceAnnouncement()
{
return serviceAnnouncement;
}

@Config("rackserver.announcement")
@ConfigDescription("name of service to announce")
public RackServletConfig setServiceAnnouncement(String serviceAnnouncement)
{
this.serviceAnnouncement = serviceAnnouncement;
return this;
}
} }
76 changes: 76 additions & 0 deletions rack/src/test/java/com/proofpoint/rack/TestRackAnnounce.java
Original file line number Original file line Diff line number Diff line change
@@ -0,0 +1,76 @@
package com.proofpoint.rack;

import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
import com.google.common.io.Resources;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.proofpoint.configuration.ConfigurationFactory;
import com.proofpoint.configuration.ConfigurationModule;
import com.proofpoint.discovery.client.AnnouncementHttpServerInfo;
import com.proofpoint.discovery.client.Announcer;
import com.proofpoint.discovery.client.DiscoveryLookupClient;
import com.proofpoint.discovery.client.ServiceAnnouncement;
import com.proofpoint.discovery.client.ServiceDescriptor;
import com.proofpoint.discovery.client.testing.InMemoryDiscoveryClient;
import com.proofpoint.discovery.client.testing.TestingDiscoveryModule;
import com.proofpoint.http.server.testing.TestingHttpServer;
import com.proofpoint.http.server.testing.TestingHttpServerModule;
import com.proofpoint.node.testing.TestingNodeModule;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.Test;

import java.util.List;

import static com.proofpoint.discovery.client.ServiceAnnouncement.serviceAnnouncement;
import static org.testng.Assert.assertEquals;

public class TestRackAnnounce
{
private TestingHttpServer server;

@AfterMethod
public void tearDown()
throws Exception
{
if (server != null) {
server.stop();
}
}

@Test
public void testAnnouncement()
throws Exception
{
Injector injector = Guice.createInjector(
new TestingHttpServerModule(),
new RackModule(),
new TestingNodeModule(),
new TestingDiscoveryModule(),
new ConfigurationModule(new ConfigurationFactory(
ImmutableMap.<String, String>builder()
.put("rackserver.rack-config-path", Resources.getResource("test/raw/config.ru").getFile())
.put("rackserver.announcement", "racktest")
.build()
)));

server = injector.getInstance(TestingHttpServer.class);
server.start();

injector.getInstance(Announcer.class).start();

AnnouncementHttpServerInfo httpServerInfo = injector.getInstance(AnnouncementHttpServerInfo.class);
ServiceAnnouncement announcement = serviceAnnouncement("racktest")
.addProperty("http", httpServerInfo.getHttpUri().toASCIIString())
.addProperty("http-external", httpServerInfo.getHttpExternalUri().toASCIIString())
.build();

DiscoveryLookupClient lookupClient = injector.getInstance(InMemoryDiscoveryClient.class);
List<ServiceDescriptor> descriptors = lookupClient.getServices("racktest").get().getServiceDescriptors();

assertEquals(descriptors.size(), 1);
ServiceDescriptor descriptor = Iterables.getOnlyElement(descriptors);

assertEquals(descriptor.getProperties(), announcement.getProperties());
}
}
2 changes: 2 additions & 0 deletions rack/src/test/java/com/proofpoint/rack/TestRackModuleRaw.java
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import com.ning.http.client.Response; import com.ning.http.client.Response;
import com.proofpoint.configuration.ConfigurationFactory; import com.proofpoint.configuration.ConfigurationFactory;
import com.proofpoint.configuration.ConfigurationModule; import com.proofpoint.configuration.ConfigurationModule;
import com.proofpoint.discovery.client.testing.TestingDiscoveryModule;
import com.proofpoint.http.server.testing.TestingHttpServer; import com.proofpoint.http.server.testing.TestingHttpServer;
import com.proofpoint.http.server.testing.TestingHttpServerModule; import com.proofpoint.http.server.testing.TestingHttpServerModule;
import com.proofpoint.node.testing.TestingNodeModule; import com.proofpoint.node.testing.TestingNodeModule;
Expand All @@ -49,6 +50,7 @@ public void setup()
new TestingHttpServerModule(), new TestingHttpServerModule(),
new RackModule(), new RackModule(),
new TestingNodeModule(), new TestingNodeModule(),
new TestingDiscoveryModule(),
new ConfigurationModule(new ConfigurationFactory( new ConfigurationModule(new ConfigurationFactory(
ImmutableMap.<String, String>builder() ImmutableMap.<String, String>builder()
.put("rackserver.rack-config-path", Resources.getResource("test/raw/config.ru").getFile()) .put("rackserver.rack-config-path", Resources.getResource("test/raw/config.ru").getFile())
Expand Down
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import com.ning.http.client.Response; import com.ning.http.client.Response;
import com.proofpoint.configuration.ConfigurationFactory; import com.proofpoint.configuration.ConfigurationFactory;
import com.proofpoint.configuration.ConfigurationModule; import com.proofpoint.configuration.ConfigurationModule;
import com.proofpoint.discovery.client.testing.TestingDiscoveryModule;
import com.proofpoint.http.server.testing.TestingHttpServer; import com.proofpoint.http.server.testing.TestingHttpServer;
import com.proofpoint.http.server.testing.TestingHttpServerModule; import com.proofpoint.http.server.testing.TestingHttpServerModule;
import com.proofpoint.node.testing.TestingNodeModule; import com.proofpoint.node.testing.TestingNodeModule;
Expand All @@ -45,6 +46,7 @@ public void setup()
new TestingHttpServerModule(), new TestingHttpServerModule(),
new RackModule(), new RackModule(),
new TestingNodeModule(), new TestingNodeModule(),
new TestingDiscoveryModule(),
new ConfigurationModule(new ConfigurationFactory( new ConfigurationModule(new ConfigurationFactory(
ImmutableMap.<String, String>builder() ImmutableMap.<String, String>builder()
.put("rackserver.rack-config-path", Resources.getResource("test/sinatra/config.ru").getFile()) .put("rackserver.rack-config-path", Resources.getResource("test/sinatra/config.ru").getFile())
Expand Down
13 changes: 10 additions & 3 deletions rack/src/test/java/com/proofpoint/rack/TestRackServletConfig.java
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -38,15 +38,22 @@ public class TestRackServletConfig
public void testDefaults() public void testDefaults()
{ {
ConfigAssertions.assertRecordedDefaults(ConfigAssertions.recordDefaults(RackServletConfig.class) ConfigAssertions.assertRecordedDefaults(ConfigAssertions.recordDefaults(RackServletConfig.class)
.setRackConfigPath("config.ru")); .setRackConfigPath("config.ru")
.setServiceAnnouncement(null)
);
} }


@Test @Test
public void testExplicitPropertyMappings() public void testExplicitPropertyMappings()
{ {
Map<String, String> properties = ImmutableMap.of("rackserver.rack-config-path", "rack-configuration.ru"); Map<String, String> properties = ImmutableMap.<String, String>builder()
.put("rackserver.rack-config-path", "rack-configuration.ru")
.put("rackserver.announcement", "test")
.build();


RackServletConfig expected = new RackServletConfig().setRackConfigPath("rack-configuration.ru"); RackServletConfig expected = new RackServletConfig()
.setRackConfigPath("rack-configuration.ru")
.setServiceAnnouncement("test");


ConfigAssertions.assertFullMapping(properties, expected); ConfigAssertions.assertFullMapping(properties, expected);
} }
Expand Down

0 comments on commit b1ead67

Please sign in to comment.