Skip to content

Commit a5b6344

Browse files
ShriramKumarakshaisarma
authored andcommitted
Adding helper methods (#3)
1 parent e946cb1 commit a5b6344

File tree

7 files changed

+138
-19
lines changed

7 files changed

+138
-19
lines changed

src/main/java/com/yahoo/bullet/Config.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
@Slf4j
2424
public class Config implements Serializable {
2525
private Map<String, Object> data;
26+
public static final String DELIMITER = ".";
2627

2728
/**
2829
* Constructor that loads a specific file and loads the settings in that file.
@@ -86,6 +87,24 @@ public Map<String, Object> getAll(Optional<Set<String>> keys) {
8687
.collect(HashMap::new, (m, e) -> m.put(e.getKey(), e.getValue()), HashMap::putAll);
8788
}
8889

90+
/**
91+
* Get mappings for all keys with the specified prefix. If stripPrefix is set, the output keys do not contain the
92+
* prefix.
93+
*
94+
* @param keys an {@link Optional} {@link Set} of mapping names.
95+
* @param prefix The prefix that relevant keys must contain.
96+
* @param stripPrefix If true, the output keys do not contain the prefix.
97+
* @return mapping for keys (or all keys in data, if keys is empty) with the prefix.
98+
*/
99+
public Map<String, Object> getAllWithPrefix(Optional<Set<String>> keys, String prefix, boolean stripPrefix) {
100+
Set<String> inclusions = keys.orElse(data.keySet());
101+
int prefixLength = stripPrefix ? prefix.length() : 0;
102+
return this.data.entrySet().stream()
103+
.filter(e -> inclusions.contains(e.getKey()))
104+
.filter(e -> e.getKey().startsWith(prefix))
105+
.collect(HashMap::new, (m, e) -> m.put(e.getKey().substring(prefixLength), e.getValue()), HashMap::putAll);
106+
}
107+
89108
/**
90109
* Gets all mappings other than a set of keys. If no keys are specified, all mappings
91110
* are returned.

src/main/java/com/yahoo/bullet/pubsub/PubSubMessage.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,4 +96,27 @@ public PubSubMessage(String id, String content, Metadata metadata, int sequence)
9696
public boolean hasContent() {
9797
return content != null;
9898
}
99+
100+
/**
101+
* Check if message has {@link Metadata}.
102+
*
103+
* @return true if message has Metadata.
104+
*/
105+
public boolean hasMetadata() {
106+
return metadata != null;
107+
}
108+
109+
@Override
110+
public int hashCode() {
111+
return (id + sequence).hashCode();
112+
}
113+
114+
@Override
115+
public boolean equals(Object other) {
116+
if (other == null || other.getClass() != PubSubMessage.class) {
117+
return false;
118+
}
119+
PubSubMessage otherMessage = (PubSubMessage) other;
120+
return id.equals(otherMessage.getId()) && sequence == otherMessage.getSequence();
121+
}
99122
}

src/main/resources/bullet_defaults.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,3 +180,9 @@ bullet.record.inject.timestamp.enable: true
180180
# This is the key that is used to add the timestamp in milliseconds to the record, if record.inject.timestamp.enable is true. This is the timestamp when
181181
# the record is projected. This is only applicable to RAW queries.
182182
bullet.record.inject.timestamp.key: "bullet_project_timestamp"
183+
184+
## PubSub default settings
185+
# This should point to a concrete implementation of PubSub.
186+
bullet.pubsub.class.name: "com.yahoo.bullet.pubsub.PubSub"
187+
# The current context. This can be QUERY_PROCESSING or QUERY_SUBMISSION. The PubSub implementation should use this to generate appropriate Publishers and Subscribers.
188+
bullet.pubsub.context.name: "QUERY_PROCESSING"

src/test/java/com/yahoo/bullet/BulletConfigTest.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,4 +118,32 @@ public void testMerging() throws IOException {
118118
Assert.assertEquals(config.get(BulletConfig.AGGREGATION_MAX_SIZE), 100L);
119119
Assert.assertEquals(config.get("pi"), 3.14);
120120
}
121+
122+
@Test
123+
public void testPropertiesWithPrefix() throws IOException {
124+
BulletConfig config = new BulletConfig("src/test/resources/test_config.yaml");
125+
String prefix = "bullet.pubsub";
126+
String fieldValue = "com.yahoo.bullet.pubsub.MockPubSub";
127+
128+
int configSize = config.getAllWithPrefix(Optional.empty(), prefix, false).size();
129+
Assert.assertEquals(configSize, 2);
130+
131+
Map<String, Object> properties = config.getAllWithPrefix(Optional.empty(), prefix, false);
132+
Assert.assertEquals(properties.get(BulletConfig.PUBSUB_CLASS_NAME), fieldValue);
133+
}
134+
135+
@Test
136+
public void testPropertiesStripPrefix() throws IOException {
137+
BulletConfig config = new BulletConfig("src/test/resources/test_config.yaml");
138+
String prefix = "bullet.pubsub.";
139+
String fieldName = "class.name";
140+
String fieldValue = "com.yahoo.bullet.pubsub.MockPubSub";
141+
142+
int configSize = config.getAllWithPrefix(Optional.empty(), prefix, true).size();
143+
Assert.assertEquals(configSize, 2);
144+
145+
Map<String, Object> properties = config.getAllWithPrefix(Optional.empty(), prefix, true);
146+
Assert.assertNull(properties.get(BulletConfig.PUBSUB_CLASS_NAME));
147+
Assert.assertEquals(properties.get(fieldName), fieldValue);
148+
}
121149
}

src/test/java/com/yahoo/bullet/pubsub/PubSubMessageTest.java

Lines changed: 61 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -13,36 +13,36 @@ private String getRandomString() {
1313

1414
@Test
1515
public void testNoMetadataCreation() {
16-
String messageId = getRandomString();
16+
String messageID = getRandomString();
1717
String messageContent = getRandomString();
1818

19-
PubSubMessage message = new PubSubMessage(messageId, messageContent);
20-
Assert.assertTrue(messageId.equals(message.getId()));
19+
PubSubMessage message = new PubSubMessage(messageID, messageContent);
20+
Assert.assertTrue(messageID.equals(message.getId()));
2121
Assert.assertEquals(message.getSequence(), -1);
2222
Assert.assertTrue(messageContent.equals(message.getContent()));
2323
Assert.assertNull(message.getMetadata());
2424
}
2525

2626
@Test
2727
public void testWithSequenceCreation() {
28-
String messageId = getRandomString();
28+
String messageID = getRandomString();
2929
String messageContent = getRandomString();
3030

31-
PubSubMessage message = new PubSubMessage(messageId, messageContent, 0);
32-
Assert.assertTrue(messageId.equals(message.getId()));
31+
PubSubMessage message = new PubSubMessage(messageID, messageContent, 0);
32+
Assert.assertTrue(messageID.equals(message.getId()));
3333
Assert.assertTrue(messageContent.equals(message.getContent()));
3434
Assert.assertEquals(message.getSequence(), 0);
3535
Assert.assertNull(message.getMetadata());
3636
}
3737

3838
@Test
3939
public void testWithSignalCreation() {
40-
String messageId = getRandomString();
40+
String messageID = getRandomString();
4141
String messageContent = getRandomString();
4242
Signal signal = Signal.ACKNOWLEDGE;
4343

44-
PubSubMessage message = new PubSubMessage(messageId, messageContent, signal, 0);
45-
Assert.assertTrue(messageId.equals(message.getId()));
44+
PubSubMessage message = new PubSubMessage(messageID, messageContent, signal, 0);
45+
Assert.assertTrue(messageID.equals(message.getId()));
4646
Assert.assertTrue(messageContent.equals(message.getContent()));
4747
Assert.assertEquals(message.getSequence(), 0);
4848
Assert.assertNotNull(message.getMetadata());
@@ -53,13 +53,13 @@ public void testWithSignalCreation() {
5353

5454
@Test
5555
public void testWithMetadataCreation() {
56-
String messageId = getRandomString();
56+
String messageID = getRandomString();
5757
String messageContent = getRandomString();
5858
String metadataContent = getRandomString();
5959
Signal signal = Signal.ACKNOWLEDGE;
6060
//Test creation without a sequence number.
61-
PubSubMessage message = new PubSubMessage(messageId, messageContent, new Metadata(signal, metadataContent));
62-
Assert.assertTrue(messageId.equals(message.getId()));
61+
PubSubMessage message = new PubSubMessage(messageID, messageContent, new Metadata(signal, metadataContent));
62+
Assert.assertTrue(messageID.equals(message.getId()));
6363
Assert.assertTrue(messageContent.equals(message.getContent()));
6464
Assert.assertEquals(message.getSequence(), -1);
6565
Assert.assertNotNull(message.getMetadata());
@@ -69,13 +69,13 @@ public void testWithMetadataCreation() {
6969

7070
@Test
7171
public void testWithMetadataAndSequenceCreation() {
72-
String messageId = getRandomString();
72+
String messageID = getRandomString();
7373
String messageContent = getRandomString();
7474
String metadataContent = getRandomString();
7575
Signal signal = Signal.ACKNOWLEDGE;
7676
//Test creation with a sequence number.
77-
PubSubMessage message = new PubSubMessage(messageId, messageContent, new Metadata(signal, metadataContent), 0);
78-
Assert.assertTrue(messageId.equals(message.getId()));
77+
PubSubMessage message = new PubSubMessage(messageID, messageContent, new Metadata(signal, metadataContent), 0);
78+
Assert.assertTrue(messageID.equals(message.getId()));
7979
Assert.assertTrue(messageContent.equals(message.getContent()));
8080
Assert.assertEquals(message.getSequence(), 0);
8181
Assert.assertNotNull(message.getMetadata());
@@ -85,19 +85,62 @@ public void testWithMetadataAndSequenceCreation() {
8585

8686
@Test
8787
public void testHasContent() {
88-
String messageId = getRandomString();
88+
String messageID = getRandomString();
8989
String messageContent = getRandomString();
9090

9191
PubSubMessage message;
92-
message = new PubSubMessage(messageId, messageContent);
92+
message = new PubSubMessage(messageID, messageContent);
9393
Assert.assertTrue(message.hasContent());
9494

95-
message = new PubSubMessage(messageId, null, Signal.COMPLETE);
95+
message = new PubSubMessage(messageID, null, Signal.COMPLETE);
9696
Assert.assertFalse(message.hasContent());
9797
}
9898

9999
@Test(expectedExceptions = NullPointerException.class)
100100
public void testNoIDIllegalCreation() {
101101
new PubSubMessage(null, "");
102102
}
103+
104+
@Test
105+
public void testEquals() {
106+
String messageID = getRandomString();
107+
String messageContent = getRandomString();
108+
Metadata randomMetadata = new Metadata(Signal.ACKNOWLEDGE, getRandomString());
109+
PubSubMessage message1 = new PubSubMessage(messageID, messageContent, randomMetadata);
110+
PubSubMessage message2 = new PubSubMessage(messageID, messageContent, new Metadata(Signal.ACKNOWLEDGE, getRandomString()));
111+
PubSubMessage message3 = new PubSubMessage(getRandomString(), messageContent, randomMetadata);
112+
PubSubMessage message4 = new PubSubMessage(messageID, messageContent, randomMetadata, 2);
113+
114+
Assert.assertEquals(message1, message2);
115+
Assert.assertNotEquals(message1, message3);
116+
Assert.assertNotEquals(message1, message4);
117+
Assert.assertFalse(message1.equals(null));
118+
Assert.assertFalse(message1.equals(new PubSubException("Dummy")));
119+
}
120+
121+
@Test
122+
public void testHashCode() {
123+
String messageID = getRandomString();
124+
String messageContent = getRandomString();
125+
Metadata randomMetadata = new Metadata(Signal.ACKNOWLEDGE, getRandomString());
126+
PubSubMessage message1 = new PubSubMessage(messageID, messageContent, randomMetadata);
127+
PubSubMessage message2 = new PubSubMessage(messageID, messageContent, new Metadata(Signal.ACKNOWLEDGE, getRandomString()));
128+
Assert.assertEquals(message1.hashCode(), message2.hashCode());
129+
}
130+
131+
@Test
132+
public void testHasMetadata() {
133+
String messageID = getRandomString();
134+
String messageContent = getRandomString();
135+
136+
PubSubMessage message;
137+
message = new PubSubMessage(messageID, messageContent);
138+
Assert.assertFalse(message.hasMetadata());
139+
140+
message = new PubSubMessage(messageID, null, Signal.COMPLETE);
141+
Assert.assertTrue(message.hasMetadata());
142+
143+
message = new PubSubMessage(messageID, null, new Metadata());
144+
Assert.assertTrue(message.hasMetadata());
145+
}
103146
}

src/test/java/com/yahoo/bullet/pubsub/PubSubTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ public void testIllegalPubSubParameter() throws Exception {
3333
@Test(expectedExceptions = PubSubException.class)
3434
public void testIllegalPubSubClassName() throws Exception {
3535
BulletConfig config = new BulletConfig(null);
36+
config.set(BulletConfig.PUBSUB_CLASS_NAME, null);
3637
try {
3738
PubSub.from(config);
3839
} catch (Exception e) {

src/test/resources/test_config.yaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,5 @@ bullet.query.max.duration: 10000
22
bullet.query.aggregation.max.size: 100
33
# Some random fake setting
44
fake.setting: null
5-
65
bullet.pubsub.context.name: "QUERY_PROCESSING"
76
bullet.pubsub.class.name: "com.yahoo.bullet.pubsub.MockPubSub"

0 commit comments

Comments
 (0)