/* | |
* 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. | |
*/ | |
/* ==================================================================== | |
* The Apache Software License, Version 1.1 | |
* | |
* Copyright (c) 2001,2004 The Apache Software Foundation. All rights | |
* reserved. | |
* | |
* Redistribution and use in source and binary forms, with or without | |
* modification, are permitted provided that the following conditions | |
* are met: | |
* | |
* 1. Redistributions of source code must retain the above copyright | |
* notice, this list of conditions and the following disclaimer. | |
* | |
* 2. Redistributions in binary form must reproduce the above copyright | |
* notice, this list of conditions and the following disclaimer in | |
* the documentation and/or other materials provided with the | |
* distribution. | |
* | |
* 3. The end-user documentation included with the redistribution, | |
* if any, must include the following acknowledgment: | |
* "This product includes software developed by the | |
* Apache Software Foundation (http://www.apache.org/)." | |
* Alternately, this acknowledgment may appear in the software itself, | |
* if and wherever such third-party acknowledgments normally appear. | |
* | |
* 4. The names "Apache" and "Apache Software Foundation" and | |
* "Apache Lucene" must not be used to endorse or promote products | |
* derived from this software without prior written permission. For | |
* written permission, please contact apache@apache.org. | |
* | |
* 5. Products derived from this software may not be called "Apache", | |
* "Apache Lucene", nor may "Apache" appear in their name, without | |
* prior written permission of the Apache Software Foundation. | |
* | |
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |
* SUCH DAMAGE. | |
* ==================================================================== | |
* | |
* This software consists of voluntary contributions made by many | |
* individuals on behalf of the Apache Software Foundation. For more | |
* information on the Apache Software Foundation, please see | |
* <http://www.apache.org/>. | |
*/ | |
using System; | |
using NUnit.Framework; | |
using LuceneTestCase = Lucene.Net.Util.LuceneTestCase; | |
namespace Lucene.Net.Store | |
{ | |
[TestFixture] | |
public class TestLock : LuceneTestCase | |
{ | |
[Test] | |
public virtual void TestObtain() | |
{ | |
LockMock lock_Renamed = new LockMock(this); | |
Lucene.Net.Store.Lock.LOCK_POLL_INTERVAL = 10; | |
try | |
{ | |
lock_Renamed.Obtain(Lucene.Net.Store.Lock.LOCK_POLL_INTERVAL); | |
Assert.Fail("Should have failed to obtain lock"); | |
} | |
catch (System.IO.IOException) | |
{ | |
Assert.AreEqual(lock_Renamed.lockAttempts, 2, "should attempt to lock more than once"); | |
} | |
} | |
private class LockMock : Lucene.Net.Store.Lock | |
{ | |
public LockMock(TestLock enclosingInstance) | |
{ | |
InitBlock(enclosingInstance); | |
} | |
private void InitBlock(TestLock enclosingInstance) | |
{ | |
this.enclosingInstance = enclosingInstance; | |
} | |
private TestLock enclosingInstance; | |
override public bool IsLocked() | |
{ | |
return false; | |
} | |
public TestLock Enclosing_Instance | |
{ | |
get | |
{ | |
return enclosingInstance; | |
} | |
} | |
public int lockAttempts; | |
public override bool Obtain() | |
{ | |
lockAttempts++; | |
return false; | |
} | |
public override void Release() | |
{ | |
// do nothing | |
} | |
} | |
} | |
} |