<!--
  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.2.5" name="test-wf-cred">
    <credentials>
        <credential name="testcred" type="cred">
           <property>
               <name>aa</name>
               <value>AA</value>
           </property>
           <property>
               <name>bb</name>
               <value>BB</value>
           </property>
        </credential>
    </credentials>
    <start to="start"/>
    <action name="start" cred="testcred">
        <map-reduce>
            <job-tracker>jt</job-tracker>
            <name-node>nn</name-node>
            <configuration>
                <property>
                    <name>a</name>
                    <value>A</value>
                </property>
                <property>
                    <name>b</name>
                    <value>B</value>
                </property>
            </configuration>
        </map-reduce>
        <ok to="end"/>
        <error to="fail"/>
    </action>
    <kill name="fail">
        <message>Map/Reduce failed</message>
    </kill>
    <end name="end"/>
</workflow-app>
