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

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

    <action name="d">
        <map-reduce>
            <job-tracker>foo</job-tracker>
            <name-node>bar</name-node>
            <prepare>
                <delete path="/tmp"/>
                <mkdir path="/tmp"/>
            </prepare>
            <streaming>
                <mapper>/mycat.sh</mapper>
                <reducer>/mywc.sh</reducer>
            </streaming>
            <job-xml>/tmp</job-xml>
            <configuration>
                <property>
                    <name>a</name>
                    <value>A</value>
                </property>
                <property>
                    <name>b</name>
                    <value>B</value>
                </property>
            </configuration>
            <file>/tmp</file>
            <archive>/tmp</archive>
        </map-reduce>
        <ok to="f"/>
        <error to="b"/>
    </action>

    <action name="e">
        <pig>
            <job-tracker>foo</job-tracker>
            <name-node>bar</name-node>
            <prepare>
                <delete path="/tmp"/>
                <mkdir path="/tmp"/>
            </prepare>
            <configuration>
                <property>
                    <name>a</name>
                    <value>A</value>
                </property>
                <property>
                    <name>b</name>
                    <value>B</value>
                </property>
            </configuration>
            <script>/tmp</script>
            <param>x</param>
            <file>/tmp</file>
            <file>/tmp</file>
        </pig>
        <ok to="f"/>
        <error to="b"/>
    </action>

    <join name="f" to="g"/>

    <action name="g">
        <fs>
            <mkdir path='/tmp'/>
            <chmod path='/tmp' permissions='-rwxrw-rw-' dir-files='false'/>
            <move source='/tmp' target='/tmp2'/>
            <delete path='/tmp2'/>
            <mkdir path='/tmp3'/>
            <delete path='/tmp3'/>
            <mkdir path='/tmp4'/>
            <touchz path='/tmp4/file'/>
            <setrep path='/tmp4/file' replication-factor='2'/>
        </fs>
        <ok to="z"/>
        <error to="b"/>
    </action>

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