<?xml version="1.0" ?>

<!--
 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.
-->

<!-- a basic solrconfig that tests can use when they want simple minimal solrconfig/schema
     DO NOT ADD THINGS TO THIS CONFIG! -->
<config>
  <luceneMatchVersion>${tests.luceneMatchVersion:LATEST}</luceneMatchVersion>
  <dataDir>${solr.data.dir:}</dataDir>
  <directoryFactory name="DirectoryFactory" class="${solr.directoryFactory:solr.RAMDirectoryFactory}"/>
  <schemaFactory class="ClassicIndexSchemaFactory"/>
  <requestHandler name="/select" class="solr.SearchHandler"></requestHandler>
  
  <indexConfig>
    <!-- we don't use solrconfig.snippet.randomindexconfig.xml here
         because we explicitly test that a mergedSegmentWarmer works, 
         but we can still test some of the other randomized indexConfig 
         settings
    -->
    <mergedSegmentWarmer class="org.apache.lucene.index.SimpleMergedSegmentWarmer"/>
    <mergePolicyFactory class="org.apache.solr.util.RandomMergePolicyFactory" />
  
    <useCompoundFile>${useCompoundFile}</useCompoundFile>
    <maxBufferedDocs>${solr.tests.maxBufferedDocs}</maxBufferedDocs>
    <ramBufferSizeMB>${solr.tests.ramBufferSizeMB}</ramBufferSizeMB>
    <mergeScheduler class="${solr.tests.mergeScheduler}" />
    <writeLockTimeout>1000</writeLockTimeout>
    <commitLockTimeout>10000</commitLockTimeout>
    <lockType>single</lockType>
  </indexConfig>
</config>
