@Override
    synchronized public void registerConfigChangeWatcher(ConfigChangeWatcher watcher) {
        startListening(new WatcherHolder(watcher), new ConfigChangeCallback() {
            @Override
            public synchronized void onSingleValueChanged(final WatcherHolder holder, final ConfigTable.ConfigItem configItem) {
                notifySingleValue(holder.getWatcher(), configItem);
            }

            @Override
            public synchronized void onGroupValuesChanged(final WatcherHolder holder,
                                             final GroupConfigTable.GroupConfigItems groupConfigItems) {
                notifyGroupValues((GroupConfigChangeWatcher) holder.getWatcher(), groupConfigItems);
            }
        });
    }
@Test
    public void testGroupConfInit() {
        final Map<String, String> config = new ConcurrentHashMap<>();

        register.registerConfigChangeWatcher(
            new GroupConfigChangeWatcher("MockModule", new FetchingConfigWatcherRegisterTest.MockProvider(),
                                         "groupItems1"
            ) {
                @Override
                public void notifyGroup(Map<String, ConfigChangeEvent> groupItems) {
                    groupItems.forEach((groupItemName, event) -> {
                        config.put(groupItemName, event.getNewValue());
                    });
                }

                @Override
                public Map<String, String> groupItems() {
                    return config;
                }
            });

        assertEquals("abc", config.get("item1"));
        assertEquals("abc2", config.get("item2"));
    }