Added test for StartupSettings and documentation of use - in README.md.

* Also tweaked the `StartupSettings` so that it now reads in an `id` for the node, rather than just resulting in a blank `id`;
* Moved some logging from stdout to log4j
* Full `maven test` passing

Arguably this would result in a version change, as the settings file format has changed and now requires an id field. However we could make it optional, but it seems odd to have nodes with no ids.
This commit is contained in:
Ian
2016-01-31 11:17:34 +11:00
parent 1d064f4676
commit c97c5ff810
5 changed files with 167 additions and 10 deletions

View File

@ -8,6 +8,7 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
@ -18,6 +19,10 @@ import org.json.JSONObject;
* @author harmenw
*/
public class StartupSettings {
private static final Logger log = Logger.getLogger(StartupSettings.class);
/** The id to use fo the service */
private String _id;
/** The port to start the gossip service on. */
private int _port;
@ -31,25 +36,51 @@ public class StartupSettings {
/**
* Constructor.
*
* @param id
* The id to be used for this service
* @param port
* The port to start the service on.
* @param logLevel
* unused
*/
public StartupSettings(int port, int logLevel) {
this(port, new GossipSettings());
public StartupSettings(String id, int port, int logLevel) {
this(id, port, new GossipSettings());
}
/**
* Constructor.
*
* @param id
* The id to be used for this service
* @param port
* The port to start the service on.
*/
public StartupSettings(int port, GossipSettings gossipSettings) {
public StartupSettings(String id, int port, GossipSettings gossipSettings) {
_id = id;
_port = port;
_gossipSettings = gossipSettings;
_gossipMembers = new ArrayList<>();
}
/**
* Set the id to be used for this service.
*
* @param id
* The id for this service.
*/
public void setId( String id ) {
_id = id;
}
/**
* Get the id for this service.
*
* @return the service's id.
*/
public String getId() {
return _id;
}
/**
* Set the port of the gossip service.
*
@ -126,6 +157,9 @@ public class StartupSettings {
// Now get the port number.
int port = jsonObject.getInt("port");
// Get the id to be used
String id = jsonObject.getString("id");
// Get the gossip_interval from the config file.
int gossipInterval = jsonObject.getInt("gossip_interval");
@ -133,22 +167,22 @@ public class StartupSettings {
int cleanupInterval = jsonObject.getInt("cleanup_interval");
// Initiate the settings with the port number.
StartupSettings settings = new StartupSettings(port, new GossipSettings(
StartupSettings settings = new StartupSettings(id, port, new GossipSettings(
gossipInterval, cleanupInterval));
// Now iterate over the members from the config file and add them to the settings.
System.out.print("Config-members [");
String configMembersDetails = "Config-members [";
JSONArray membersJSON = jsonObject.getJSONArray("members");
for (int i = 0; i < membersJSON.length(); i++) {
JSONObject memberJSON = membersJSON.getJSONObject(i);
RemoteGossipMember member = new RemoteGossipMember(memberJSON.getString("host"),
memberJSON.getInt("port"), "");
settings.addGossipMember(member);
System.out.print(member.getAddress());
configMembersDetails += member.getAddress();
if (i < (membersJSON.length() - 1))
System.out.print(", ");
configMembersDetails += ", ";
}
System.out.println("]");
log.info( configMembersDetails + "]" );
// Return the created settings object.
return settings;