mirror of https://github.com/apache/lucene.git
LUCENE-5858: Add missing files.
git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/branches/lucene5858@1621756 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
09c2c4d0aa
commit
dcadf7ef6f
|
@ -0,0 +1,62 @@
|
||||||
|
package org.apache.lucene.index;
|
||||||
|
|
||||||
|
import org.apache.lucene.analysis.MockAnalyzer;
|
||||||
|
import org.apache.lucene.codecs.Codec;
|
||||||
|
import org.apache.lucene.codecs.lucene40.Lucene40RWCodec;
|
||||||
|
import org.apache.lucene.codecs.lucene41.Lucene41RWCodec;
|
||||||
|
import org.apache.lucene.codecs.lucene42.Lucene42RWCodec;
|
||||||
|
import org.apache.lucene.codecs.lucene45.Lucene45RWCodec;
|
||||||
|
import org.apache.lucene.codecs.lucene46.Lucene46RWCodec;
|
||||||
|
import org.apache.lucene.codecs.lucene49.Lucene49RWCodec;
|
||||||
|
import org.apache.lucene.document.Document;
|
||||||
|
import org.apache.lucene.document.Field.Store;
|
||||||
|
import org.apache.lucene.document.NumericDocValuesField;
|
||||||
|
import org.apache.lucene.document.StringField;
|
||||||
|
import org.apache.lucene.store.Directory;
|
||||||
|
import org.apache.lucene.util.LuceneTestCase;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class TestDisableImpersonation extends LuceneTestCase {
|
||||||
|
|
||||||
|
public void testDisableImpersonation() throws Exception {
|
||||||
|
Codec[] oldCodecs = new Codec[] { new Lucene40RWCodec(), new Lucene41RWCodec(), new Lucene42RWCodec(), new Lucene45RWCodec(), new Lucene46RWCodec(), new Lucene49RWCodec() };
|
||||||
|
Directory dir = newDirectory();
|
||||||
|
IndexWriterConfig conf = newIndexWriterConfig(new MockAnalyzer(random()));
|
||||||
|
conf.setCodec(oldCodecs[random().nextInt(oldCodecs.length)]);
|
||||||
|
IndexWriter writer = new IndexWriter(dir, conf);
|
||||||
|
|
||||||
|
Document doc = new Document();
|
||||||
|
doc.add(new StringField("f", "bar", Store.YES));
|
||||||
|
doc.add(new NumericDocValuesField("n", 18L));
|
||||||
|
|
||||||
|
OLD_FORMAT_IMPERSONATION_IS_ACTIVE = false;
|
||||||
|
try {
|
||||||
|
writer.addDocument(doc);
|
||||||
|
writer.close();
|
||||||
|
fail("should not have succeeded to impersonate an old format!");
|
||||||
|
} catch (UnsupportedOperationException e) {
|
||||||
|
writer.rollback();
|
||||||
|
} finally {
|
||||||
|
OLD_FORMAT_IMPERSONATION_IS_ACTIVE = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
dir.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,125 @@
|
||||||
|
package org.apache.lucene.index;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import org.apache.lucene.analysis.MockAnalyzer;
|
||||||
|
import org.apache.lucene.codecs.Codec;
|
||||||
|
import org.apache.lucene.codecs.lucene40.Lucene40RWCodec;
|
||||||
|
import org.apache.lucene.codecs.lucene41.Lucene41RWCodec;
|
||||||
|
import org.apache.lucene.codecs.lucene42.Lucene42RWCodec;
|
||||||
|
import org.apache.lucene.codecs.lucene45.Lucene45RWCodec;
|
||||||
|
import org.apache.lucene.document.BinaryDocValuesField;
|
||||||
|
import org.apache.lucene.document.Document;
|
||||||
|
import org.apache.lucene.document.Field.Store;
|
||||||
|
import org.apache.lucene.document.NumericDocValuesField;
|
||||||
|
import org.apache.lucene.document.StringField;
|
||||||
|
import org.apache.lucene.store.Directory;
|
||||||
|
import org.apache.lucene.util.BytesRef;
|
||||||
|
import org.apache.lucene.util.LuceneTestCase;
|
||||||
|
|
||||||
|
|
||||||
|
public class TestDocValuesUpdatesOnOldSegments extends LuceneTestCase {
|
||||||
|
|
||||||
|
static long getValue(BinaryDocValues bdv, int idx) {
|
||||||
|
BytesRef term = bdv.get(idx);
|
||||||
|
idx = term.offset;
|
||||||
|
byte b = term.bytes[idx++];
|
||||||
|
long value = b & 0x7FL;
|
||||||
|
for (int shift = 7; (b & 0x80L) != 0; shift += 7) {
|
||||||
|
b = term.bytes[idx++];
|
||||||
|
value |= (b & 0x7FL) << shift;
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
// encodes a long into a BytesRef as VLong so that we get varying number of bytes when we update
|
||||||
|
static BytesRef toBytes(long value) {
|
||||||
|
BytesRef bytes = new BytesRef(10); // negative longs may take 10 bytes
|
||||||
|
while ((value & ~0x7FL) != 0L) {
|
||||||
|
bytes.bytes[bytes.length++] = (byte) ((value & 0x7FL) | 0x80L);
|
||||||
|
value >>>= 7;
|
||||||
|
}
|
||||||
|
bytes.bytes[bytes.length++] = (byte) value;
|
||||||
|
return bytes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testBinaryUpdates() throws Exception {
|
||||||
|
Codec[] oldCodecs = new Codec[] { new Lucene40RWCodec(), new Lucene41RWCodec(), new Lucene42RWCodec(), new Lucene45RWCodec() };
|
||||||
|
Directory dir = newDirectory();
|
||||||
|
|
||||||
|
boolean oldValue = OLD_FORMAT_IMPERSONATION_IS_ACTIVE;
|
||||||
|
// create a segment with an old Codec
|
||||||
|
IndexWriterConfig conf = newIndexWriterConfig(new MockAnalyzer(random()));
|
||||||
|
conf.setCodec(oldCodecs[random().nextInt(oldCodecs.length)]);
|
||||||
|
OLD_FORMAT_IMPERSONATION_IS_ACTIVE = true;
|
||||||
|
IndexWriter writer = new IndexWriter(dir, conf);
|
||||||
|
Document doc = new Document();
|
||||||
|
doc.add(new StringField("id", "doc", Store.NO));
|
||||||
|
doc.add(new BinaryDocValuesField("f", toBytes(5L)));
|
||||||
|
writer.addDocument(doc);
|
||||||
|
writer.close();
|
||||||
|
|
||||||
|
conf = newIndexWriterConfig(new MockAnalyzer(random()));
|
||||||
|
writer = new IndexWriter(dir, conf);
|
||||||
|
writer.updateBinaryDocValue(new Term("id", "doc"), "f", toBytes(4L));
|
||||||
|
OLD_FORMAT_IMPERSONATION_IS_ACTIVE = false;
|
||||||
|
try {
|
||||||
|
writer.close();
|
||||||
|
fail("should not have succeeded to update a segment written with an old Codec");
|
||||||
|
} catch (UnsupportedOperationException e) {
|
||||||
|
writer.rollback();
|
||||||
|
} finally {
|
||||||
|
OLD_FORMAT_IMPERSONATION_IS_ACTIVE = oldValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
dir.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testNumericUpdates() throws Exception {
|
||||||
|
Codec[] oldCodecs = new Codec[] { new Lucene40RWCodec(), new Lucene41RWCodec(), new Lucene42RWCodec(), new Lucene45RWCodec() };
|
||||||
|
Directory dir = newDirectory();
|
||||||
|
|
||||||
|
boolean oldValue = OLD_FORMAT_IMPERSONATION_IS_ACTIVE;
|
||||||
|
// create a segment with an old Codec
|
||||||
|
IndexWriterConfig conf = newIndexWriterConfig(new MockAnalyzer(random()));
|
||||||
|
conf.setCodec(oldCodecs[random().nextInt(oldCodecs.length)]);
|
||||||
|
OLD_FORMAT_IMPERSONATION_IS_ACTIVE = true;
|
||||||
|
IndexWriter writer = new IndexWriter(dir, conf);
|
||||||
|
Document doc = new Document();
|
||||||
|
doc.add(new StringField("id", "doc", Store.NO));
|
||||||
|
doc.add(new NumericDocValuesField("f", 5));
|
||||||
|
writer.addDocument(doc);
|
||||||
|
writer.close();
|
||||||
|
|
||||||
|
conf = newIndexWriterConfig(new MockAnalyzer(random()));
|
||||||
|
writer = new IndexWriter(dir, conf);
|
||||||
|
writer.updateNumericDocValue(new Term("id", "doc"), "f", 4L);
|
||||||
|
OLD_FORMAT_IMPERSONATION_IS_ACTIVE = false;
|
||||||
|
try {
|
||||||
|
writer.close();
|
||||||
|
fail("should not have succeeded to update a segment written with an old Codec");
|
||||||
|
} catch (UnsupportedOperationException e) {
|
||||||
|
writer.rollback();
|
||||||
|
} finally {
|
||||||
|
OLD_FORMAT_IMPERSONATION_IS_ACTIVE = oldValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
dir.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue