Skip to content
Permalink
Browse files
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.
  • Loading branch information
mgao0 authored and junkaixue committed Apr 7, 2022
1 parent a1c52ed commit 7669a05ae7460bc2445e083a3e45c871e627a207
Show file tree
Hide file tree
Showing 2 changed files with 379 additions and 42 deletions.
@@ -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;
}
}

0 comments on commit 7669a05

Please sign in to comment.