Skip to content

Commit df28d84

Browse files
Fixing PR comments
1 parent d61a8fb commit df28d84

File tree

5 files changed

+124
-125
lines changed

5 files changed

+124
-125
lines changed
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package io.split.client;
2+
3+
import com.google.common.annotations.VisibleForTesting;
4+
import com.google.common.collect.ConcurrentHashMultiset;
5+
import com.google.common.collect.Multiset;
6+
import org.slf4j.Logger;
7+
import org.slf4j.LoggerFactory;
8+
9+
public class ApiKeyCounter {
10+
11+
private static final Logger _log = LoggerFactory.getLogger(ApiKeyCounter.class);
12+
private static volatile ApiKeyCounter _apiKeyCounter;
13+
private static final Multiset<String> USED_API_KEYS = ConcurrentHashMultiset.create();
14+
15+
16+
private ApiKeyCounter() {}
17+
18+
public static ApiKeyCounter getApiKeyCounterInstance() {
19+
if(_apiKeyCounter == null) {
20+
synchronized (ApiKeyCounter.class) {
21+
if (_apiKeyCounter == null) {
22+
_apiKeyCounter = new ApiKeyCounter();
23+
}
24+
}
25+
}
26+
27+
return _apiKeyCounter;
28+
}
29+
30+
public void add(String apiKey) {
31+
String message;
32+
if (USED_API_KEYS.contains(apiKey)) {
33+
message = String.format("factory instantiation: You already have %s with this API Key. " +
34+
"We recommend keeping only one instance of the factory at all times (Singleton pattern) and reusing " +
35+
"it throughout your application.",
36+
USED_API_KEYS.count(apiKey) == 1 ? "1 factory" : String.format("%s factories", USED_API_KEYS.count(apiKey)));
37+
_log.warn(message);
38+
} else if (!USED_API_KEYS.isEmpty()) {
39+
message = "factory instantiation: You already have an instance of the Split factory. " +
40+
"Make sure you definitely want this additional instance. We recommend keeping only one instance of " +
41+
"the factory at all times (Singleton pattern) and reusing it throughout your application.“";
42+
_log.warn(message);
43+
}
44+
USED_API_KEYS.add(apiKey);
45+
}
46+
47+
public void remove(String apiKey) {
48+
USED_API_KEYS.remove(apiKey);
49+
}
50+
51+
/**
52+
* Just for test
53+
* @param apiKey
54+
* @return
55+
*/
56+
@VisibleForTesting
57+
boolean isApiKeyPresent(String apiKey) {
58+
return USED_API_KEYS.contains(apiKey);
59+
}
60+
61+
/**
62+
* Just for test
63+
* @param apiKey
64+
* @return
65+
*/
66+
@VisibleForTesting
67+
int getCount(String apiKey) {
68+
return USED_API_KEYS.count(apiKey);
69+
}
70+
}

client/src/main/java/io/split/client/FactoryInstantiationsCounter.java

Lines changed: 0 additions & 70 deletions
This file was deleted.

client/src/main/java/io/split/client/SplitFactoryImpl.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -67,12 +67,12 @@ public class SplitFactoryImpl implements SplitFactory {
6767
private final Runnable destroyer;
6868
private final String _apiToken;
6969
private boolean isTerminated = false;
70-
private final FactoryInstantiationsCounter _factoryInstantiationsCounter;
70+
private final ApiKeyCounter _apiKeyCounter;
7171

7272
public SplitFactoryImpl(String apiToken, SplitClientConfig config) throws URISyntaxException {
7373
_apiToken = apiToken;
74-
_factoryInstantiationsCounter = FactoryInstantiationsCounter.getFactoryInstantiationsServiceInstance();
75-
_factoryInstantiationsCounter.addToken(apiToken);
74+
_apiKeyCounter = ApiKeyCounter.getApiKeyCounterInstance();
75+
_apiKeyCounter.add(apiToken);
7676

7777
if (config.blockUntilReady() == -1) {
7878
//BlockUntilReady not been set
@@ -200,8 +200,7 @@ public void destroy() {
200200
synchronized (SplitFactoryImpl.class) {
201201
if (!isTerminated) {
202202
destroyer.run();
203-
_factoryInstantiationsCounter.removeToken(_apiToken);
204-
int i = FactoryInstantiationsCounter.getFactoryInstantiationsServiceInstance().getCount(_apiToken);
203+
_apiKeyCounter.remove(_apiToken);
205204
isTerminated = true;
206205
}
207206
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package io.split.client;
2+
3+
import junit.framework.TestCase;
4+
import org.junit.Test;
5+
6+
public class ApiKeyCounterTest extends TestCase {
7+
8+
private static final String FIRST_KEY = "KEYNUMBER1";
9+
private static final String SECOND_KEY = "KEYNUMBER2";
10+
11+
@Test
12+
public void testAddingNewToken() {
13+
ApiKeyCounter.getApiKeyCounterInstance().add(FIRST_KEY);
14+
assertTrue(ApiKeyCounter.getApiKeyCounterInstance().isApiKeyPresent(FIRST_KEY));
15+
16+
ApiKeyCounter.getApiKeyCounterInstance().remove(FIRST_KEY);
17+
}
18+
19+
@Test
20+
public void testAddingExistingToken() {
21+
ApiKeyCounter.getApiKeyCounterInstance().add(FIRST_KEY);
22+
ApiKeyCounter.getApiKeyCounterInstance().add(FIRST_KEY);
23+
24+
assertTrue(ApiKeyCounter.getApiKeyCounterInstance().isApiKeyPresent(FIRST_KEY));
25+
assertEquals(2, ApiKeyCounter.getApiKeyCounterInstance().getCount(FIRST_KEY));
26+
ApiKeyCounter.getApiKeyCounterInstance().remove(FIRST_KEY);
27+
ApiKeyCounter.getApiKeyCounterInstance().remove(FIRST_KEY);
28+
}
29+
30+
@Test
31+
public void testRemovingToken() {
32+
ApiKeyCounter.getApiKeyCounterInstance().add(FIRST_KEY);
33+
ApiKeyCounter.getApiKeyCounterInstance().remove(FIRST_KEY);
34+
35+
assertFalse(ApiKeyCounter.getApiKeyCounterInstance().isApiKeyPresent(FIRST_KEY));
36+
assertEquals(0, ApiKeyCounter.getApiKeyCounterInstance().getCount(FIRST_KEY));
37+
}
38+
39+
@Test
40+
public void testAddingNonExistingToken() {
41+
ApiKeyCounter.getApiKeyCounterInstance().add(FIRST_KEY);
42+
ApiKeyCounter.getApiKeyCounterInstance().add(SECOND_KEY);
43+
44+
assertTrue(ApiKeyCounter.getApiKeyCounterInstance().isApiKeyPresent(FIRST_KEY));
45+
assertEquals(1, ApiKeyCounter.getApiKeyCounterInstance().getCount(FIRST_KEY));
46+
assertEquals(1, ApiKeyCounter.getApiKeyCounterInstance().getCount(SECOND_KEY));
47+
ApiKeyCounter.getApiKeyCounterInstance().remove(FIRST_KEY);
48+
ApiKeyCounter.getApiKeyCounterInstance().remove(SECOND_KEY);
49+
}
50+
}

client/src/test/java/io/split/client/FactoryInstantiationsCounterTest.java

Lines changed: 0 additions & 50 deletions
This file was deleted.

0 commit comments

Comments
 (0)