<!--
  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"/>
    <decision name="a">
        <switch>
            <case to="b">true</case>
            <case to="c">false</case>
            <default to="d"/>
        </switch>
    </decision>
    <kill name="b">
        <message>kill</message>
    </kill>

    <fork name="c">
        <path start="f"/>
        <path start="e"/>
    </fork>

    <join name="e" to="z"/>

    <end name="z"/>
</workflow-app>
