// Path: src/com/eyeline/mnp/ConcurrentStorage.java
// public class ConcurrentStorage implements Storage {
//     private Storage realStorage;
//     private ReadWriteLock lock = new ReentrantReadWriteLock();
//     private Lock readLock = lock.readLock();
//     private Lock writeLock = lock.writeLock();
// 
//     public ConcurrentStorage(Storage realStorage) {
//         this.realStorage = realStorage;
//     }
// 
//     public void setRealStorage(Storage realStorage) {
//         try{
//             writeLock.lock();
//             this.realStorage = realStorage;
//         } finally {
//             writeLock.unlock();
//         }
//     }
// 
//     @Override
//     public Mno put(Mask mask, Mno mno) {
//         try{
//             writeLock.lock();
//             return realStorage.put(mask, mno);
//         } finally {
//             writeLock.unlock();
//         }
//     }
// 
//     @Override
//     public Mno remove(Mask mask) {
//         try{
//             writeLock.lock();
//             return realStorage.remove(mask);
//         } finally {
//             writeLock.unlock();
//         }
//     }
// 
//     @Override
//     public void clear() {
//         try{
//             writeLock.lock();
//             realStorage.clear();
//         } finally {
//             writeLock.unlock();
//         }
//     }
// 
//     @Override
//     public Mno lookup(String subscriber) {
//         try{
//             readLock.lock();
//             return realStorage.lookup(subscriber);
//         } finally {
//             readLock.unlock();
//         }
//     }
// }
// 
// Path: src/com/eyeline/mnp/Storage.java
// public interface Storage {
//     /**
//      * Lookup MNO by phone number
//      * @param subscriber phone number
//      * @return mno if exists, otherwise null
//      */
//     public Mno lookup(String subscriber);
// 
//     /**
//      * Adds a new mask to mno in storage
//      * but only if mask is not exists
//      * @param mask new mask
//      * @param mno mno
//      * @return Mno – old value if present
//      */
//     public Mno put(Mask mask, Mno mno);
// 
//     /**
//      * remove mask from the storage
//      * @param mask mask
//      * @return old value
//      */
//     public Mno remove(Mask mask);
// 
//     /**
//      * clear the storage
//      */
//     public void clear();
// }


import com.eyeline.mnp.ConcurrentStorage;
import com.eyeline.mnp.Storage;
package com.eyeline.mnp.test;


/**
 * @author Chukanov
 */
public class ConcurrentStorageTest extends BaseStorageTest {
    @Override
// Path: src/com/eyeline/mnp/ConcurrentStorage.java
// public class ConcurrentStorage implements Storage {
//     private Storage realStorage;
//     private ReadWriteLock lock = new ReentrantReadWriteLock();
//     private Lock readLock = lock.readLock();
//     private Lock writeLock = lock.writeLock();
// 
//     public ConcurrentStorage(Storage realStorage) {
//         this.realStorage = realStorage;
//     }
// 
//     public void setRealStorage(Storage realStorage) {
//         try{
//             writeLock.lock();
//             this.realStorage = realStorage;
//         } finally {
//             writeLock.unlock();
//         }
//     }
// 
//     @Override
//     public Mno put(Mask mask, Mno mno) {
//         try{
//             writeLock.lock();
//             return realStorage.put(mask, mno);
//         } finally {
//             writeLock.unlock();
//         }
//     }
// 
//     @Override
//     public Mno remove(Mask mask) {
//         try{
//             writeLock.lock();
//             return realStorage.remove(mask);
//         } finally {
//             writeLock.unlock();
//         }
//     }
// 
//     @Override
//     public void clear() {
//         try{
//             writeLock.lock();
//             realStorage.clear();
//         } finally {
//             writeLock.unlock();
//         }
//     }
// 
//     @Override
//     public Mno lookup(String subscriber) {
//         try{
//             readLock.lock();
//             return realStorage.lookup(subscriber);
//         } finally {
//             readLock.unlock();
//         }
//     }
// }
// 
// Path: src/com/eyeline/mnp/Storage.java
// public interface Storage {
//     /**
//      * Lookup MNO by phone number
//      * @param subscriber phone number
//      * @return mno if exists, otherwise null
//      */
//     public Mno lookup(String subscriber);
// 
//     /**
//      * Adds a new mask to mno in storage
//      * but only if mask is not exists
//      * @param mask new mask
//      * @param mno mno
//      * @return Mno – old value if present
//      */
//     public Mno put(Mask mask, Mno mno);
// 
//     /**
//      * remove mask from the storage
//      * @param mask mask
//      * @return old value
//      */
//     public Mno remove(Mask mask);
// 
//     /**
//      * clear the storage
//      */
//     public void clear();
// }


// Path: test/com/eyeline/mnp/test/ConcurrentStorageTest.java
import com.eyeline.mnp.ConcurrentStorage;
import com.eyeline.mnp.Storage;

package com.eyeline.mnp.test;


/**
 * @author Chukanov
 */
public class ConcurrentStorageTest extends BaseStorageTest {
    @Override
    protected Storage build() {