Hello everyone,

The issue reported here: https://issues.apache.org/jira/browse/FLINK-1587
made us -or at least me :) - wonder if the current approach we have towards
testing the graph methods is the best one.

After implementing the quick fix to the bug(check if the vertex.iterator
hasNext and if it doesn't throw a NoSuchElementException), I went ahead and
tried to test it. You basically just needed an edge set with at least one
invalid src vertex id(i.e. that was not in the vertex set).

The test should then have just consisted of a call to outDegrees on the
malformed graph and would have just needed to be preceded by @Test(expect
ed = NoSuchElementException.class). But this works just when you assert in
each test method. We do the assertion in the @After method, as can be seen
here:
https://github.com/apache/flink/blob/master/flink-staging/flink-gelly/src/test/java/org/apache/flink/graph/test/DegreesITCase.java

The hack I tried then looked something like this:
@After
       public void after() throws Exception {
       if(exception == null) {
           compareResultsB
yLinesInMemory(expectedResult, resultPath);
       } else {
           assert(exception.equals(new NoSuchElementException("The edge set
contains an invalid src/target id")));
       }
       }

and the test was:
@Test
   public void testOutDegreesI
nvalidEdgeSrcId() throws Exception {
       /*
                * Test outDegrees() with an edge containing a source id
that does not
                * exist in the vertex DataSet
                */
       final ExecutionEnvironment env =
ExecutionEnvironment.getExecutionEnvironment();

       Graph<Long, Long, Long> graph =
Graph.fromDataSet(TestGraphUtils.getLongLongVertexData(env),
               TestGraphUtils.getLongLongInvalidEdgeData(env), env);

       try {
           graph.outDegrees().writeAsCsv(resultPath);
           env.execute();
       } catch (Exception exception) {
           this.exception = exception;
       }

But even so, computeResultsByLinesInMemory still got called.

I have not seen tests in Flink who support this kind of check, which is why
I brought this subject up for discussion. What would, in your view be the
best approach?

Thanks!
Andra

Reply via email to