SofaRegistrySubscribeCallback implements SubscriberDataObserver, ConfigDataObserver { @Override public void handleData(String dataId, UserData userData) { if (dataId == null) { return; } this.lastUserData = userData; printUserData(dataId, userData); if (flag != null) { flag[0].compareAndSet(false, true); } if (canNotify()) { flag = null; composeAndNotify(userData, lastConfigData); } } SofaRegistrySubscribeCallback(); @Override void handleData(String dataId, UserData userData); int getListenerNum(); @Override void handleData(String dataId, ConfigData configData); static final String CONFIG_SEPARATOR; static final String DEFAULT_ZONE; }
@Test public void handleData() throws Exception { Subscriber listSub = new MockSubscribe(5); Configurator attrSub = new MockConfigurator(2); final AtomicInteger ps = new AtomicInteger(0); ProviderInfoListener listener = new ProviderInfoListener() { @Override public void addProvider(ProviderGroup providerGroup) { ps.addAndGet(providerGroup.size()); } @Override public void removeProvider(ProviderGroup providerGroup) { ps.addAndGet(-providerGroup.size()); } @Override public void updateProviders(ProviderGroup providerGroup) { ps.set(providerGroup.size()); } @Override public void updateAllProviders(List<ProviderGroup> providerGroups) { ps.set(0); for (ProviderGroup providerGroup : providerGroups) { ps.addAndGet(providerGroup.size()); } } }; SofaRegistrySubscribeCallback callback = new SofaRegistrySubscribeCallback(); callback.addProviderInfoListener("xxxxx", new ConsumerConfig(), listener); Assert.assertTrue((!callback.flag[0].get()) && (!callback.flag[1].get())); callback.handleData("xxxxx", buildConfigPs(2)); try { Thread.sleep(200); } finally { } Assert.assertTrue(callback.flag[1].get()); Assert.assertTrue(ps.get() == 0); callback.handleData("xxxxx", buildPs(5)); try { Thread.sleep(200); } finally { } Assert.assertTrue(callback.flag == null); Assert.assertEquals(ps.get(), 5 + 5); callback = new SofaRegistrySubscribeCallback(); ps.set(0); callback.addProviderInfoListener("yyyyy", new ConsumerConfig(), listener); callback.handleData("yyyyy", buildPs(5)); try { Thread.sleep(200); } finally { } callback.handleData("yyyyy", buildConfigPs(2)); try { Thread.sleep(200); } finally { } Assert.assertTrue(callback.flag == null); Assert.assertEquals(ps.get(), 5 + 5); }