Merge branch 'stable-2.14' into stable-2.15
* stable-2.14:
Upgrade bazlets to latest stable-2.14
Fix typo in CachePatte{r}nMatcherTest name
Do not propagate ldap_groups cache evictions
Change-Id: I0a9ed91c98164e55da2abb34209d07972fee5611
diff --git a/.bazelversion b/.bazelversion
new file mode 100644
index 0000000..09d1d01
--- /dev/null
+++ b/.bazelversion
@@ -0,0 +1,2 @@
+0.29.0
+
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/cache/CachePatternMatcher.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/cache/CachePatternMatcher.java
index 41a2b13..cab8f58 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/cache/CachePatternMatcher.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/cache/CachePatternMatcher.java
@@ -27,13 +27,7 @@
class CachePatternMatcher {
private static final List<String> DEFAULT_PATTERNS =
ImmutableList.of(
- "^accounts.*",
- "^groups.*",
- "ldap_groups",
- "ldap_usernames",
- "projects",
- "sshkeys",
- "web_sessions");
+ "^accounts.*", "^groups.*", "ldap_usernames", "projects", "sshkeys", "web_sessions");
private final Pattern pattern;
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/cache/CacheEvictionIT.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/cache/CacheEvictionIT.java
index af2d685..7299238 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/cache/CacheEvictionIT.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/cache/CacheEvictionIT.java
@@ -25,12 +25,19 @@
import static com.google.common.truth.Truth.assertThat;
import com.github.tomakehurst.wiremock.junit.WireMockRule;
+import com.google.common.cache.LoadingCache;
+import com.google.gerrit.acceptance.GerritConfig;
import com.google.gerrit.acceptance.GlobalPluginConfig;
import com.google.gerrit.acceptance.LightweightPluginDaemonTest;
import com.google.gerrit.acceptance.NoHttpd;
import com.google.gerrit.acceptance.TestPlugin;
import com.google.gerrit.acceptance.UseLocalDisk;
import com.google.gerrit.acceptance.UseSsh;
+import com.google.gerrit.reviewdb.client.AccountGroup;
+import com.google.inject.Inject;
+import com.google.inject.name.Named;
+import java.util.Collections;
+import java.util.Set;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import org.apache.http.HttpStatus;
@@ -46,9 +53,16 @@
public class CacheEvictionIT extends LightweightPluginDaemonTest {
private static final int PORT = 18888;
private static final String URL = "http://localhost:" + PORT;
+ private static final String GROUP_CACHE = "ldap_groups";
@Rule public WireMockRule wireMockRule = new WireMockRule(options().port(PORT));
+ @Inject
+ @Named(GROUP_CACHE)
+ private LoadingCache<String, Set<AccountGroup.UUID>> membershipCache;
+
+ private final CountDownLatch expectedRequestLatch = new CountDownLatch(1);
+
@Override
public void setUp() throws Exception {
givenThat(any(anyUrl()).willReturn(aResponse().withStatus(HttpStatus.SC_NO_CONTENT)));
@@ -59,18 +73,49 @@
@UseLocalDisk
@GlobalPluginConfig(pluginName = "high-availability", name = "peerInfo.static.url", value = URL)
@GlobalPluginConfig(pluginName = "high-availability", name = "http.retryInterval", value = "100")
+ @GerritConfig(name = "auth.type", value = "ldap")
public void flushProjectsCacheShouldSendPostForEvictingRemoteCache() throws Exception {
final String flushRequest = "/plugins/high-availability/cache/" + Constants.PROJECTS;
- final CountDownLatch expectedRequestLatch = new CountDownLatch(1);
+
+ expectRestApiCall(flushRequest);
+
+ adminSshSession.exec("gerrit flush-caches --cache " + Constants.PROJECTS);
+ assertThat(waitForEvictionEvents()).isTrue();
+ verify(postRequestedFor(urlEqualTo(flushRequest)));
+ }
+
+ @Test
+ @UseLocalDisk
+ @GlobalPluginConfig(pluginName = "high-availability", name = "peerInfo.static.url", value = URL)
+ @GlobalPluginConfig(pluginName = "high-availability", name = "http.retryInterval", value = "100")
+ @GerritConfig(name = "auth.type", value = "ldap")
+ public void ldapCacheLoadShouldNotSendAnyPostEvictionForLdapGroups() throws Exception {
+ final String flushRequest = "/plugins/high-availability/cache/" + GROUP_CACHE;
+ String username = "username";
+ Set<AccountGroup.UUID> groups = Collections.emptySet();
+
+ expectRestApiCall(flushRequest);
+
+ loadLdapGroupMembers(username, groups);
+ loadLdapGroupMembers(username, groups); // For triggering an eviction
+ assertThat(waitForEvictionEvents()).isFalse();
+ verify(0, postRequestedFor(urlEqualTo(flushRequest)));
+ }
+
+ private void expectRestApiCall(final String flushRequest) {
wireMockRule.addMockServiceRequestListener(
(request, response) -> {
if (request.getAbsoluteUrl().contains(flushRequest)) {
expectedRequestLatch.countDown();
}
});
+ }
- adminSshSession.exec("gerrit flush-caches --cache " + Constants.PROJECTS);
- assertThat(expectedRequestLatch.await(5, TimeUnit.SECONDS)).isTrue();
- verify(postRequestedFor(urlEqualTo(flushRequest)));
+ private boolean waitForEvictionEvents() throws InterruptedException {
+ return expectedRequestLatch.await(5, TimeUnit.SECONDS);
+ }
+
+ private void loadLdapGroupMembers(String username, Set<AccountGroup.UUID> groups) {
+ membershipCache.put(username, groups);
}
}
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/cache/CachePattenMatcherTest.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/cache/CachePatternMatcherTest.java
similarity index 98%
rename from src/test/java/com/ericsson/gerrit/plugins/highavailability/cache/CachePattenMatcherTest.java
rename to src/test/java/com/ericsson/gerrit/plugins/highavailability/cache/CachePatternMatcherTest.java
index 35a6ba3..9093238 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/cache/CachePattenMatcherTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/cache/CachePatternMatcherTest.java
@@ -26,7 +26,7 @@
import org.mockito.junit.MockitoJUnitRunner;
@RunWith(MockitoJUnitRunner.class)
-public class CachePattenMatcherTest {
+public class CachePatternMatcherTest {
@Mock(answer = RETURNS_DEEP_STUBS)
private Configuration configurationMock;
@@ -46,7 +46,6 @@
"groups_byuuid",
"groups_external",
"groups_members",
- "ldap_groups",
"ldap_usernames",
"projects",
"sshkeys",
@@ -67,6 +66,7 @@
"diff_summary",
"git_tags",
"ldap_group_existence",
+ "ldap_groups",
"ldap_groups_byinclude",
"mergeability",
"oauth_tokens",