From 128b5fe2aa48f92e9d07e58a6984c3d15dd175f2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Gast=C3=B3n=20Fournier?= <gaston@getunleash.io>
Date: Fri, 17 Nov 2023 00:27:25 +0100
Subject: [PATCH] More cleanups

---
 .../repository/HttpFeatureFetcher.java        |  6 ++--
 .../io/getunleash/util/UnleashConfig.java     | 21 +++++++-----
 .../io/getunleash/DefaultUnleashTest.java     | 33 ++++++++++---------
 .../DependentFeatureToggleTest.java           |  3 +-
 src/test/java/io/getunleash/UnleashTest.java  |  2 --
 .../integration/ClientSpecificationTest.java  |  2 +-
 .../repository/UnleashEngineStateHandler.java | 10 ++++++
 7 files changed, 44 insertions(+), 33 deletions(-)

diff --git a/src/main/java/io/getunleash/repository/HttpFeatureFetcher.java b/src/main/java/io/getunleash/repository/HttpFeatureFetcher.java
index b4278d301..82faac723 100644
--- a/src/main/java/io/getunleash/repository/HttpFeatureFetcher.java
+++ b/src/main/java/io/getunleash/repository/HttpFeatureFetcher.java
@@ -1,8 +1,10 @@
 package io.getunleash.repository;
 
 import io.getunleash.UnleashException;
-import io.getunleash.engine.YggdrasilInvalidInputException;
 import io.getunleash.util.UnleashConfig;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStream;
@@ -11,8 +13,6 @@
 import java.net.URL;
 import java.nio.charset.StandardCharsets;
 import java.util.Optional;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 public class HttpFeatureFetcher implements FeatureFetcher {
     private static final Logger LOG = LoggerFactory.getLogger(HttpFeatureFetcher.class);
diff --git a/src/main/java/io/getunleash/util/UnleashConfig.java b/src/main/java/io/getunleash/util/UnleashConfig.java
index c84e72729..53428b1cc 100644
--- a/src/main/java/io/getunleash/util/UnleashConfig.java
+++ b/src/main/java/io/getunleash/util/UnleashConfig.java
@@ -1,5 +1,7 @@
 package io.getunleash.util;
 
+import static io.getunleash.DefaultUnleash.UNKNOWN_STRATEGY;
+
 import io.getunleash.CustomHttpHeadersProvider;
 import io.getunleash.DefaultCustomHttpHeadersProviderImpl;
 import io.getunleash.UnleashContextProvider;
@@ -10,19 +12,21 @@
 import io.getunleash.repository.HttpFeatureFetcher;
 import io.getunleash.repository.ToggleBootstrapProvider;
 import io.getunleash.strategy.Strategy;
-
 import java.io.File;
 import java.math.BigInteger;
-import java.net.*;
+import java.net.Authenticator;
+import java.net.HttpURLConnection;
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
+import java.net.PasswordAuthentication;
+import java.net.Proxy;
+import java.net.URI;
+import java.net.UnknownHostException;
 import java.nio.charset.StandardCharsets;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 import java.time.Duration;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Optional;
-
-import static io.getunleash.DefaultUnleash.UNKNOWN_STRATEGY;
+import java.util.*;
 
 public class UnleashConfig {
 
@@ -97,8 +101,7 @@ private UnleashConfig(
             @Nullable Strategy fallbackStrategy,
             @Nullable ToggleBootstrapProvider unleashBootstrapProvider,
             @Nullable Proxy proxy,
-            @Nullable Authenticator proxyAuthenticator
-    ) {
+            @Nullable Authenticator proxyAuthenticator) {
 
         if (appName == null) {
             throw new IllegalStateException("You are required to specify the unleash appName");
diff --git a/src/test/java/io/getunleash/DefaultUnleashTest.java b/src/test/java/io/getunleash/DefaultUnleashTest.java
index 9cd3224cf..435afdfae 100644
--- a/src/test/java/io/getunleash/DefaultUnleashTest.java
+++ b/src/test/java/io/getunleash/DefaultUnleashTest.java
@@ -87,9 +87,10 @@ public void should_evaluate_missing_segment_as_false() {
                         asList(semverConstraint),
                         asList(404),
                         Collections.emptyList());
-        when(featureRepository.getToggle(toggleName))
-                .thenReturn(new FeatureToggle(toggleName, true, asList(withMissingSegment)));
-        when(featureRepository.getSegment(404)).thenReturn(Segment.DENY_SEGMENT);
+        new UnleashEngineStateHandler(sut).setState(
+            Collections.singletonList(new FeatureToggle(toggleName, true, asList(withMissingSegment))),
+            Collections.singletonList(Segment.DENY_SEGMENT));
+
         when(contextProvider.getContext())
                 .thenReturn(UnleashContext.builder().addProperty("version", semVer).build());
         assertThat(sut.isEnabled(toggleName)).isFalse();
@@ -106,18 +107,18 @@ public void should_evaluate_segment_collection_with_one_missing_segment_as_false
                         asList(semverConstraint),
                         asList(404, 1),
                         Collections.emptyList());
-        when(featureRepository.getToggle(toggleName))
-                .thenReturn(new FeatureToggle(toggleName, true, asList(withMissingSegment)));
-        when(featureRepository.getSegment(1))
-                .thenReturn(
-                        new Segment(
-                                1,
-                                "always true",
-                                asList(
-                                        new Constraint(
-                                                "always_true",
-                                                Operator.NOT_IN,
-                                                Collections.EMPTY_LIST))));
+        new UnleashEngineStateHandler(sut).setState(
+            Collections.singletonList(new FeatureToggle(toggleName, true, asList(withMissingSegment))),
+            Collections.singletonList(new Segment(
+                1,
+                "always true",
+                asList(
+                    new Constraint(
+                        "always_true",
+                        Operator.NOT_IN,
+                        Collections.EMPTY_LIST)))));
+
+
         when(contextProvider.getContext())
                 .thenReturn(UnleashContext.builder().addProperty("version", "1.2.2").build());
         assertThat(sut.isEnabled(toggleName)).isFalse();
@@ -145,8 +146,8 @@ public void should_allow_fallback_strategy() {
 
         ActivationStrategy as = new ActivationStrategy("forFallback", new HashMap<>());
         FeatureToggle toggle = new FeatureToggle("toggle1", true, Collections.singletonList(as));
-        when(contextProvider.getContext()).thenReturn(UnleashContext.builder().build());
         new UnleashEngineStateHandler(sut).setState(toggle);
+        when(contextProvider.getContext()).thenReturn(UnleashContext.builder().build());
 
         sut.isEnabled("toggle1");
 
diff --git a/src/test/java/io/getunleash/DependentFeatureToggleTest.java b/src/test/java/io/getunleash/DependentFeatureToggleTest.java
index 54b470c63..e03b75565 100644
--- a/src/test/java/io/getunleash/DependentFeatureToggleTest.java
+++ b/src/test/java/io/getunleash/DependentFeatureToggleTest.java
@@ -175,8 +175,7 @@ public void should_trigger_impression_event_for_parent_variant_when_checking_chi
                         singletonList(
                                 new FeatureDependency(
                                         parentName, null, singletonList("disabled"))));
-        when(featureRepository.getToggle(childName)).thenReturn(child);
-        when(featureRepository.getToggle(parentName)).thenReturn(parent);
+        new UnleashEngineStateHandler(sut).setState(child, parent);
         assertThat(sut.isEnabled(childName, UnleashContext.builder().build())).isFalse();
     }
 }
diff --git a/src/test/java/io/getunleash/UnleashTest.java b/src/test/java/io/getunleash/UnleashTest.java
index 34482a190..a29266d17 100644
--- a/src/test/java/io/getunleash/UnleashTest.java
+++ b/src/test/java/io/getunleash/UnleashTest.java
@@ -155,7 +155,6 @@ public void should_support_multiple_strategies() {
         FeatureToggle featureToggle =
                 new FeatureToggle("test", true, asList(strategy1, activeStrategy));
 
-        when(toggleRepository.getToggle("test")).thenReturn(featureToggle);
         stateHandler.setState(featureToggle);
 
         assertThat(unleash.isEnabled("test")).isTrue();
@@ -490,7 +489,6 @@ public void should_be_enabled_with_strategy_constraints() {
 
         FeatureToggle featureToggle = new FeatureToggle("test", true, asList(activeStrategy));
 
-        when(toggleRepository.getToggle("test")).thenReturn(featureToggle);
         stateHandler.setState(featureToggle);
 
         assertThat(unleash.isEnabled("test")).isTrue();
diff --git a/src/test/java/io/getunleash/integration/ClientSpecificationTest.java b/src/test/java/io/getunleash/integration/ClientSpecificationTest.java
index fea292e2c..cfc550a77 100644
--- a/src/test/java/io/getunleash/integration/ClientSpecificationTest.java
+++ b/src/test/java/io/getunleash/integration/ClientSpecificationTest.java
@@ -129,7 +129,7 @@ private Unleash setupUnleash(TestDefinition testDefinition) throws URISyntaxExce
                 UnleashConfig.builder()
                         .appName(testDefinition.getName())
                         .unleashAPI(new URI("http://localhost:" + serverMock.getPort() + "/api/"))
-                        .synchronousFetchOnInitialisation(false)
+                        .synchronousFetchOnInitialisation(true)
                         .backupFile(backupFile)
                         .build();
 
diff --git a/src/test/java/io/getunleash/repository/UnleashEngineStateHandler.java b/src/test/java/io/getunleash/repository/UnleashEngineStateHandler.java
index b11cacf9e..711478970 100644
--- a/src/test/java/io/getunleash/repository/UnleashEngineStateHandler.java
+++ b/src/test/java/io/getunleash/repository/UnleashEngineStateHandler.java
@@ -2,12 +2,14 @@
 
 import io.getunleash.DefaultUnleash;
 import io.getunleash.FeatureToggle;
+import io.getunleash.Segment;
 import io.getunleash.engine.UnleashEngine;
 import io.getunleash.engine.YggdrasilInvalidInputException;
 
 import java.lang.reflect.Field;
 import java.util.Arrays;
 import java.util.Collections;
+import java.util.List;
 
 public class UnleashEngineStateHandler {
     private final UnleashEngine unleashEngine;
@@ -33,6 +35,14 @@ public void setState(FeatureToggle ...featureToggles) {
         setState(madeUp);
     }
 
+    public void setState(List<FeatureToggle> featureToggles, List<Segment> segments) {
+        FeatureCollection madeUp = new FeatureCollection(
+            new ToggleCollection(featureToggles),
+            new SegmentCollection(segments)
+        );
+        setState(madeUp);
+    }
+
     public void setState(FeatureCollection madeUp) {
         setState(JsonFeatureParser.toJsonString(madeUp));
     }