Github user HeartSaVioR commented on a diff in the pull request:

    https://github.com/apache/storm/pull/2443#discussion_r155650836
  
    --- Diff: 
sql/storm-sql-external/storm-sql-hdfs/src/test/org/apache/storm/sql/hdfs/TestHdfsDataSourcesProvider.java
 ---
    @@ -88,46 +90,13 @@ public void shutDown() throws IOException {
         @SuppressWarnings("unchecked")
         @Test
         public void testHdfsSink() throws Exception {
    -        ISqlTridentDataSource ds = 
DataSourcesRegistry.constructTridentDataSource(
    +        ISqlStreamsDataSource ds = 
DataSourcesRegistry.constructStreamsDataSource(
                 URI.create(hdfsURI), null, null, TBL_PROPERTIES, FIELDS);
             Assert.assertNotNull(ds);
     
    -        ISqlTridentDataSource.SqlTridentConsumer consumer = 
ds.getConsumer();
    +        IRichBolt consumer = ds.getConsumer();
     
    -        Assert.assertEquals(HdfsStateFactory.class, 
consumer.getStateFactory().getClass());
    -        Assert.assertEquals(HdfsUpdater.class, 
consumer.getStateUpdater().getClass());
    -
    -        HdfsState state = (HdfsState) 
consumer.getStateFactory().makeState(Collections.emptyMap(), null, 0, 1);
    -        StateUpdater stateUpdater = consumer.getStateUpdater();
    -
    -        HdfsFileOptions options = mock(HdfsFileOptions.class);
    -        Field optionsField = state.getClass().getDeclaredField("options");
    -        optionsField.setAccessible(true);
    -        optionsField.set(state, options);
    -
    -        List<TridentTuple> tupleList = mockTupleList();
    -
    -        for (TridentTuple t : tupleList) {
    -            stateUpdater.updateState(state, Collections.singletonList(t), 
null);
    -            try {
    -                verify(options).execute(Collections.singletonList(t));
    -            } catch (IOException e) {
    -                throw new RuntimeException(e);
    -            }
    -        }
    -    }
    -
    -    private static List<TridentTuple> mockTupleList() {
    -        List<TridentTuple> tupleList = new ArrayList<>();
    -        TridentTuple t0 = mock(TridentTuple.class);
    -        TridentTuple t1 = mock(TridentTuple.class);
    -        doReturn(1).when(t0).get(0);
    -        doReturn(2).when(t1).get(0);
    -        doReturn(Lists.<Object>newArrayList(1, "2")).when(t0).getValues();
    -        doReturn(Lists.<Object>newArrayList(2, "3")).when(t1).getValues();
    -        tupleList.add(t0);
    -        tupleList.add(t1);
    -        return tupleList;
    +        Assert.assertEquals(HdfsBolt.class, consumer.getClass());
    --- End diff --
    
    Unfortunately external Bolt implementations are less standarilzed than 
Trident State and State Updater implementations. We can't mock all the 
internals in bolt and then we can't get control of the bolt. It was relatively 
easy for Trident State implementations.
    
    Maybe ideal approach to test the provider is checking Bolt's configuration 
and see provider configuration is applied to the bolt. I was trying it but 
noticed that I can't get current configuration from the bolt.
    Do you have an idea to mock the class to track the method calls for 
instances even I don't get control to create the instance?


---

Reply via email to