<!--
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License.  You may obtain a copy of the License at
  
       http://www.apache.org/licenses/LICENSE-2.0
  
  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<workflow-app xmlns="uri:oozie:workflow:0.1" name="test-wf">

    <start to="a"/>

    <action name="a">
        <test xmlns="uri:test">
            <signal-value>signal-value</signal-value>
            <external-status>external-status</external-status>
            <error>error</error>
        </test>
        <ok to="kill"/>
        <error to="end"/>
    </action>

    <kill name="kill"/>

    <end name="end"/>

</workflow-app>
