<!--
 ! Copyright 2009-2013 by The Regents of the University of California
 ! Licensed 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 from
 ! 
 !     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.
 !-->
<test-suite xmlns="urn:xml.testframework.asterix.ics.uci.edu" ResultOffsetPath="results" QueryOffsetPath="queries" QueryFileExtension=".aql">
  <test-group name="recover_after_abort">
 
    <test-case FilePath="recover_after_abort">
      <compilation-unit name="primary_index_only">
        <output-dir compare="Text">primary_index_only</output-dir>
      </compilation-unit>
    </test-case>
    
    <test-case FilePath="recover_after_abort">
      <compilation-unit name="primary_plus_default_secondary_index">
        <output-dir compare="Text">primary_plus_default_secondary_index</output-dir>
      </compilation-unit>
    </test-case>
    
    <test-case FilePath="recover_after_abort">
      <compilation-unit name="primary_plus_keyword_secondary_index">
        <output-dir compare="Text">primary_plus_keyword_secondary_index</output-dir>
      </compilation-unit>
    </test-case>
    
    <test-case FilePath="recover_after_abort">
      <compilation-unit name="primary_plus_ngram_index">
        <output-dir compare="Text">primary_plus_ngram_index</output-dir>
      </compilation-unit>
    </test-case>
    
    <test-case FilePath="recovery_ddl">
      <compilation-unit name="dataverse_recovery">
        <output-dir compare="Text">dataverse_recovery</output-dir>
      </compilation-unit>
    </test-case>
    
    <test-case FilePath="recovery_ddl">
      <compilation-unit name="datatype_recovery">
        <output-dir compare="Text">datatype_recovery</output-dir>
      </compilation-unit>
    </test-case>
    
    <test-case FilePath="recovery_ddl">
      <compilation-unit name="dataset_recovery">
        <output-dir compare="Text">dataset_recovery</output-dir>
      </compilation-unit>
    </test-case>
    
    <test-case FilePath="recovery_ddl">
      <compilation-unit name="secondary_index_recovery">
        <output-dir compare="Text">secondary_index_recovery</output-dir>
      </compilation-unit>
    </test-case>
 
    <test-case FilePath="recovery_ddl">
      <compilation-unit name="load_after_recovery">
        <output-dir compare="Text">secondary_index_recovery</output-dir>
      </compilation-unit>
    </test-case>
 
    <test-case FilePath="recovery_ddl">
      <compilation-unit name="insert_after_recovery">
        <output-dir compare="Text">secondary_index_recovery</output-dir>
      </compilation-unit>
    </test-case>

    <test-case FilePath="recovery_ddl">
      <compilation-unit name="delete_after_recovery">
        <output-dir compare="Text">secondary_index_recovery</output-dir>
      </compilation-unit>
    </test-case>

    <test-case FilePath="recovery_ddl">
      <compilation-unit name="function_recovery">
        <output-dir compare="Text">secondary_index_recovery</output-dir>
      </compilation-unit>
    </test-case>
    
  </test-group>
</test-suite>
