This is an automated email from the ASF dual-hosted git repository.
jxue pushed a commit to branch helix-vm-freeze
in repository https://gitbox.apache.org/repos/asf/helix.git
The following commit(s) were added to refs/heads/helix-vm-freeze by this push:
new d06d69134 Fix TestCloudEventCallbackProperty by bypassing connecting
to zk (#2017)
d06d69134 is described below
commit d06d691344f25632f95b2598be9524c1aca62c56
Author: Molly Gao <[email protected]>
AuthorDate: Wed Apr 6 10:53:22 2022 -0700
Fix TestCloudEventCallbackProperty by bypassing connecting to zk (#2017)
Due to logical change in ZKHelixManager constructor in a #1986,
TestCloudEventCallbackProperty broke because in this test it doesn't connect to
zookeeper server.
To fix this test, we separated MockCloudEventAwareHelixManager (previously
called MockEventAwareZKHelixManager, nested inside
TestCloudEventCallbackProperty)into a class, and include all and only the
logics related to cloud events in MockCloudEventAwareHelixManager. More
detailed, we mock a cloud config object retrieved from zk to bypass connection
to zk.
---
.../event/MockCloudEventAwareHelixManager.java | 378 +++++++++++++++++++++
.../event/TestCloudEventCallbackProperty.java | 43 +--
2 files changed, 379 insertions(+), 42 deletions(-)
diff --git
a/helix-core/src/test/java/org/apache/helix/cloud/event/MockCloudEventAwareHelixManager.java
b/helix-core/src/test/java/org/apache/helix/cloud/event/MockCloudEventAwareHelixManager.java
new file mode 100644
index 000000000..772a9b9ef
--- /dev/null
+++
b/helix-core/src/test/java/org/apache/helix/cloud/event/MockCloudEventAwareHelixManager.java
@@ -0,0 +1,378 @@
+package org.apache.helix.cloud.event;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Optional;
+import java.util.Set;
+
+import org.apache.helix.ClusterMessagingService;
+import org.apache.helix.ConfigAccessor;
+import org.apache.helix.HelixAdmin;
+import org.apache.helix.HelixCloudProperty;
+import org.apache.helix.HelixDataAccessor;
+import org.apache.helix.HelixManager;
+import org.apache.helix.HelixManagerProperties;
+import org.apache.helix.HelixManagerProperty;
+import org.apache.helix.InstanceType;
+import org.apache.helix.LiveInstanceInfoProvider;
+import org.apache.helix.PreConnectCallback;
+import org.apache.helix.PropertyKey;
+import org.apache.helix.api.listeners.ClusterConfigChangeListener;
+import org.apache.helix.api.listeners.ConfigChangeListener;
+import org.apache.helix.api.listeners.ControllerChangeListener;
+import org.apache.helix.api.listeners.CurrentStateChangeListener;
+import org.apache.helix.api.listeners.CustomizedStateChangeListener;
+import org.apache.helix.api.listeners.CustomizedStateConfigChangeListener;
+import org.apache.helix.api.listeners.CustomizedStateRootChangeListener;
+import org.apache.helix.api.listeners.CustomizedViewChangeListener;
+import org.apache.helix.api.listeners.CustomizedViewRootChangeListener;
+import org.apache.helix.api.listeners.ExternalViewChangeListener;
+import org.apache.helix.api.listeners.IdealStateChangeListener;
+import org.apache.helix.api.listeners.InstanceConfigChangeListener;
+import org.apache.helix.api.listeners.LiveInstanceChangeListener;
+import org.apache.helix.api.listeners.MessageListener;
+import org.apache.helix.api.listeners.ResourceConfigChangeListener;
+import org.apache.helix.api.listeners.ScopedConfigChangeListener;
+import org.apache.helix.cloud.constants.CloudProvider;
+import org.apache.helix.cloud.event.helix.HelixCloudEventListener;
+import org.apache.helix.controller.pipeline.Pipeline;
+import org.apache.helix.healthcheck.ParticipantHealthReportCollector;
+import org.apache.helix.model.CloudConfig;
+import org.apache.helix.model.HelixConfigScope;
+import org.apache.helix.participant.StateMachineEngine;
+import org.apache.helix.store.zk.ZkHelixPropertyStore;
+import org.apache.helix.zookeeper.datamodel.ZNRecord;
+
+public class MockCloudEventAwareHelixManager implements HelixManager {
+ private final HelixManagerProperty _helixManagerProperty;
+ private CloudEventListener _cloudEventListener;
+
+ /**
+ * Use a mock zk helix manager to avoid the need to connect to zk
+ * Change the cloud event related logic here every time the real logic is
modified in ZKHelixManager
+ */
+ public MockCloudEventAwareHelixManager(HelixManagerProperty
helixManagerProperty) {
+ _helixManagerProperty = helixManagerProperty;
+
_helixManagerProperty.getHelixCloudProperty().populateFieldsWithCloudConfig(
+ new
CloudConfig.Builder().setCloudEnabled(true).setCloudProvider(CloudProvider.AZURE)
+ .build());
+ }
+
+ public void connect() throws IllegalAccessException, InstantiationException {
+ if (_helixManagerProperty != null) {
+ HelixCloudProperty helixCloudProperty =
_helixManagerProperty.getHelixCloudProperty();
+ if (helixCloudProperty != null &&
helixCloudProperty.isCloudEventCallbackEnabled()) {
+ _cloudEventListener =
+ new
HelixCloudEventListener(helixCloudProperty.getCloudEventCallbackProperty(),
this);
+
CloudEventHandlerFactory.getInstance().registerCloudEventListener(_cloudEventListener);
+ }
+ }
+ }
+
+ public void disconnect() {
+ if (_cloudEventListener != null) {
+
CloudEventHandlerFactory.getInstance().unregisterCloudEventListener(_cloudEventListener);
+ _cloudEventListener = null;
+ }
+ }
+
+ @Override
+ public boolean isConnected() {
+ return false;
+ }
+
+ @Override
+ public void addIdealStateChangeListener(IdealStateChangeListener listener)
throws Exception {
+
+ }
+
+ @Override
+ public void
addIdealStateChangeListener(org.apache.helix.IdealStateChangeListener listener)
+ throws Exception {
+
+ }
+
+ @Override
+ public void addLiveInstanceChangeListener(LiveInstanceChangeListener
listener) throws Exception {
+
+ }
+
+ @Override
+ public void
addLiveInstanceChangeListener(org.apache.helix.LiveInstanceChangeListener
listener)
+ throws Exception {
+
+ }
+
+ @Override
+ public void addConfigChangeListener(ConfigChangeListener listener) throws
Exception {
+
+ }
+
+ @Override
+ public void addInstanceConfigChangeListener(InstanceConfigChangeListener
listener)
+ throws Exception {
+
+ }
+
+ @Override
+ public void addInstanceConfigChangeListener(
+ org.apache.helix.InstanceConfigChangeListener listener) throws Exception
{
+
+ }
+
+ @Override
+ public void addResourceConfigChangeListener(ResourceConfigChangeListener
listener)
+ throws Exception {
+
+ }
+
+ @Override
+ public void
addCustomizedStateConfigChangeListener(CustomizedStateConfigChangeListener
listener)
+ throws Exception {
+
+ }
+
+ @Override
+ public void addClusterfigChangeListener(ClusterConfigChangeListener
listener) throws Exception {
+
+ }
+
+ @Override
+ public void addConfigChangeListener(ScopedConfigChangeListener listener,
+ HelixConfigScope.ConfigScopeProperty scope) throws Exception {
+
+ }
+
+ @Override
+ public void
addConfigChangeListener(org.apache.helix.ScopedConfigChangeListener listener,
+ HelixConfigScope.ConfigScopeProperty scope) throws Exception {
+
+ }
+
+ @Override
+ public void addMessageListener(MessageListener listener, String
instanceName) throws Exception {
+
+ }
+
+ @Override
+ public void addMessageListener(org.apache.helix.MessageListener listener,
String instanceName)
+ throws Exception {
+
+ }
+
+ @Override
+ public void addCurrentStateChangeListener(CurrentStateChangeListener
listener,
+ String instanceName, String sessionId) throws Exception {
+
+ }
+
+ @Override
+ public void
addCurrentStateChangeListener(org.apache.helix.CurrentStateChangeListener
listener,
+ String instanceName, String sessionId) throws Exception {
+
+ }
+
+ @Override
+ public void addTaskCurrentStateChangeListener(CurrentStateChangeListener
listener,
+ String instanceName, String sessionId) throws Exception {
+
+ }
+
+ @Override
+ public void
addCustomizedStateRootChangeListener(CustomizedStateRootChangeListener listener,
+ String instanceName) throws Exception {
+
+ }
+
+ @Override
+ public void addCustomizedStateChangeListener(CustomizedStateChangeListener
listener,
+ String instanceName, String stateName) throws Exception {
+
+ }
+
+ @Override
+ public void addExternalViewChangeListener(ExternalViewChangeListener
listener) throws Exception {
+
+ }
+
+ @Override
+ public void addCustomizedViewChangeListener(CustomizedViewChangeListener
listener,
+ String customizedStateType) throws Exception {
+
+ }
+
+ @Override
+ public void
addCustomizedViewRootChangeListener(CustomizedViewRootChangeListener listener)
+ throws Exception {
+
+ }
+
+ @Override
+ public void addTargetExternalViewChangeListener(ExternalViewChangeListener
listener)
+ throws Exception {
+
+ }
+
+ @Override
+ public void
addExternalViewChangeListener(org.apache.helix.ExternalViewChangeListener
listener)
+ throws Exception {
+
+ }
+
+ @Override
+ public void addControllerListener(ControllerChangeListener listener) {
+
+ }
+
+ @Override
+ public void addControllerListener(org.apache.helix.ControllerChangeListener
listener) {
+
+ }
+
+ @Override
+ public void addControllerMessageListener(MessageListener listener) {
+
+ }
+
+ @Override
+ public void addControllerMessageListener(org.apache.helix.MessageListener
listener) {
+
+ }
+
+ @Override
+ public void setEnabledControlPipelineTypes(Set<Pipeline.Type> types) {
+
+ }
+
+ @Override
+ public boolean removeListener(PropertyKey key, Object listener) {
+ return false;
+ }
+
+ @Override
+ public HelixDataAccessor getHelixDataAccessor() {
+ return null;
+ }
+
+ @Override
+ public ConfigAccessor getConfigAccessor() {
+ return null;
+ }
+
+ @Override
+ public String getClusterName() {
+ return null;
+ }
+
+ @Override
+ public String getMetadataStoreConnectionString() {
+ return null;
+ }
+
+ @Override
+ public String getInstanceName() {
+ return null;
+ }
+
+ @Override
+ public String getSessionId() {
+ return null;
+ }
+
+ @Override
+ public long getLastNotificationTime() {
+ return 0;
+ }
+
+ @Override
+ public HelixAdmin getClusterManagmentTool() {
+ return null;
+ }
+
+ @Override
+ public ZkHelixPropertyStore<ZNRecord> getHelixPropertyStore() {
+ return null;
+ }
+
+ @Override
+ public ClusterMessagingService getMessagingService() {
+ return null;
+ }
+
+ @Override
+ public InstanceType getInstanceType() {
+ return null;
+ }
+
+ @Override
+ public String getVersion() {
+ return null;
+ }
+
+ @Override
+ public HelixManagerProperties getProperties() {
+ return null;
+ }
+
+ @Override
+ public StateMachineEngine getStateMachineEngine() {
+ return null;
+ }
+
+ @Override
+ public Long getSessionStartTime() {
+ return null;
+ }
+
+ @Override
+ public Optional<String> getSessionIdIfLead() {
+ return Optional.empty();
+ }
+
+ @Override
+ public boolean isLeader() {
+ return false;
+ }
+
+ @Override
+ public void startTimerTasks() {
+
+ }
+
+ @Override
+ public void stopTimerTasks() {
+
+ }
+
+ @Override
+ public void addPreConnectCallback(PreConnectCallback callback) {
+
+ }
+
+ @Override
+ public void setLiveInstanceInfoProvider(LiveInstanceInfoProvider
liveInstanceInfoProvider) {
+
+ }
+
+ @Override
+ public ParticipantHealthReportCollector getHealthReportCollector() {
+ return null;
+ }
+}
\ No newline at end of file
diff --git
a/helix-core/src/test/java/org/apache/helix/cloud/event/TestCloudEventCallbackProperty.java
b/helix-core/src/test/java/org/apache/helix/cloud/event/TestCloudEventCallbackProperty.java
index 70d9e1bf1..7207cbccc 100644
---
a/helix-core/src/test/java/org/apache/helix/cloud/event/TestCloudEventCallbackProperty.java
+++
b/helix-core/src/test/java/org/apache/helix/cloud/event/TestCloudEventCallbackProperty.java
@@ -24,13 +24,10 @@ import java.util.Collections;
import org.apache.helix.HelixCloudProperty;
import org.apache.helix.HelixManager;
import org.apache.helix.HelixManagerProperty;
-import org.apache.helix.InstanceType;
import org.apache.helix.cloud.event.helix.CloudEventCallbackProperty;
import
org.apache.helix.cloud.event.helix.CloudEventCallbackProperty.HelixOperation;
import
org.apache.helix.cloud.event.helix.CloudEventCallbackProperty.UserDefinedCallbackType;
import org.apache.helix.cloud.event.helix.HelixCloudEventListener;
-import org.apache.helix.manager.zk.HelixManagerStateListener;
-import org.apache.helix.manager.zk.ZKHelixManager;
import org.apache.helix.model.CloudConfig;
import org.apache.helix.zookeeper.datamodel.ZNRecord;
import org.testng.Assert;
@@ -55,9 +52,7 @@ public class TestCloudEventCallbackProperty {
HelixManagerProperty managerProperty = managerPropertyBuilder.build();
// Create Helix Manager
- _helixManager =
- new MockEventAwareZKHelixManager(CLUSTER_NAME, "instanceName",
InstanceType.PARTICIPANT,
- null, null, managerProperty);
+ _helixManager = new MockCloudEventAwareHelixManager(managerProperty);
}
@AfterTest
@@ -200,40 +195,4 @@ public class TestCloudEventCallbackProperty {
private boolean callbackTriggered(MockCloudEventCallbackImpl.OperationType
type) {
return MockCloudEventCallbackImpl.triggeredOperation.contains(type);
}
-
- public static class MockEventAwareZKHelixManager extends ZKHelixManager {
- private final HelixManagerProperty _helixManagerProperty;
- private CloudEventListener _cloudEventListener;
-
- /**
- * Use a mock zk helix manager to avoid the need to connect to zk
- */
- public MockEventAwareZKHelixManager(String clusterName, String
instanceName,
- InstanceType instanceType, String zkAddress, HelixManagerStateListener
stateListener,
- HelixManagerProperty helixManagerProperty) {
- super(clusterName, instanceName, instanceType, zkAddress, stateListener,
- helixManagerProperty);
- _helixManagerProperty = helixManagerProperty;
- }
-
- @Override
- public void connect() throws IllegalAccessException,
InstantiationException {
- if (_helixManagerProperty != null) {
- HelixCloudProperty helixCloudProperty =
_helixManagerProperty.getHelixCloudProperty();
- if (helixCloudProperty != null &&
helixCloudProperty.isCloudEventCallbackEnabled()) {
- _cloudEventListener =
- new
HelixCloudEventListener(helixCloudProperty.getCloudEventCallbackProperty(),
this);
-
CloudEventHandlerFactory.getInstance().registerCloudEventListener(_cloudEventListener);
- }
- }
- }
-
- @Override
- public void disconnect() {
- if (_cloudEventListener != null) {
-
CloudEventHandlerFactory.getInstance().unregisterCloudEventListener(_cloudEventListener);
- _cloudEventListener = null;
- }
- }
- }
}