### Question:
ReplicatedTablet implements c5db.interfaces.tablet.Tablet { @Override public void start() { this.tabletFiber.start(); this.tabletFiber.execute(this::createReplicator); shimFiber.start(); } ReplicatedTablet(C5Server server,
                          HRegionInfo regionInfo,
                          HTableDescriptor tableDescriptor,
                          List<Long> peers,
                          Path basePath,
                          Configuration conf,
                          ReplicationModule replicationModule,
                          Region.Creator regionCreator,
                          StartableTabletBehavior userTabletLeaderBehavior); void setStateChangeChannel(Channel<TabletStateChange> stateChangeChannel); @Override RegionSpecifier getRegionSpecifier(); @Override void start(); @Override Subscriber<TabletStateChange> getStateChangeChannel(); @Override boolean isOpen(); @Override State getTabletState(); void dispose(); @Override HRegionInfo getRegionInfo(); @Override HTableDescriptor getTableDescriptor(); @Override long getLeader(); @Override List<Long> getPeers(); @Override Region getRegion(); @Override boolean rowInRange(byte[] row);  }### Answer:
@Test public void basicTest() throws Throwable { replicatedTablet.start(); assertEventually(tabletStateChannelListener, hasMessageWithState(c5db.interfaces.tablet.Tablet.State.Open)); }
@Test public void shouldPublishATabletStateChangeToLeaderWhenTheReplicatorBecomesTheLeader() throws Throwable { context.checking(new Expectations() {{ allowing(userTabletLeaderBehavior).start(); }}); replicatedTablet.start(); assertEventually(tabletStateChannelListener, hasMessageWithState(c5db.interfaces.tablet.Tablet.State.Open)); stateChannel.publish(Replicator.State.LEADER); assertEventually(tabletStateChannelListener, hasMessageWithState(c5db.interfaces.tablet.Tablet.State.Leader)); }