@Override
  public boolean processRow( StepMetaInterface smi, StepDataInterface sdi ) throws KettleException {
    Object[] row = getRow();

    if ( null == row ) {
      //PDI-19549
      if ( jmsContext != null ) {
        jmsContext.close();
      }
      setOutputDone();
      return false;  // indicates done
    }

    if ( first ) {
      // init connections
      log.logDebug( "Connection Details: "
        + meta.jmsDelegate.getJmsProvider().getConnectionDetails( meta.jmsDelegate ) );
      jmsContext = meta.jmsDelegate.getJmsContext();
      producer = jmsContext.createProducer();
      destination = meta.jmsDelegate.getDestination();
      messageIndex = getInputRowMeta().indexOfValue( meta.getFieldToSend() );

      setOptions( producer );

      for ( Map.Entry<String, String> entry : meta.getPropertyValuesByName().entrySet() ) {
        String key = entry.getKey();
        String value = entry.getValue();
        logDebug( "Setting Jms Property Name: " + key + ", Value: " + value );
        producer.setProperty( key, value );
      }

      first = false;
    }
    if ( closed.get() ) {
      return false;
    }

    // send row to JMS
    producer.send( destination, ofNullable( row[ messageIndex ] )
      .map( Object::toString )
      .orElse( null ) );

    // send to next steps
    putRow( getInputRowMeta(), row );
    return true;
  }
@Test
  public void testProcessRow() throws Exception {

    doReturn( null ).when( step ).getRow();

    assertFalse( step.processRow( meta, data ) );
  }