/*
 * LOGICAL-PARADOX.ORG
 * Copyright (C)2005 satoshi akabane(akabane@logical-paradox.org)
 * $Id: HashMapLookupTest.java,v 1.2 2005/09/07 13:38:07 rampil Exp $
 */
package org.logical_paradox.vsan.lookup;

import java.rmi.RemoteException;
import java.util.ResourceBundle;

import org.logical_paradox.vsan.ConfigException;
import org.logical_paradox.vsan.dfs.DfsConfig;
import org.logical_paradox.vsan.dfs.DomainFileSystem;
import org.logical_paradox.vsan.dfs.DomainFileSystemImpl;
import org.logical_paradox.vsan.domain.DomainController;
import org.logical_paradox.vsan.domain.DomainControllerImpl;
import org.logical_paradox.vsan.node.DiskArrayNode;

import junit.framework.TestCase;

/**
 * HashMapLookupのテスト
 * @author satoshi akabane@logical-paradox.org
 * @version $Revision: 1.2 $
 */
public class HashMapLookupTest extends TestCase {

	/**
	 * Constructor for HashMapLookupTest.
	 * @param arg0
	 */
	public HashMapLookupTest(String arg0) {
		super(arg0);
	}

	/**
	 * 登録されていないドメインコントローラーをルックアップ
	 * 期待結果: LookupException発生
	 */
	public void testRequireNonBindedDomainController() {
		try {
			Lookup lookup = LookupFactory.getLookup(LookupFactory.TYPE_HASHMAP);
			lookup.lookupDomainController("lmz2");
			fail();
		} catch(LookupException e) {
			// OK
		}
	}
	/**
	 * 登録されていないドメインファイルシステムをルックアップ
	 * 期待結果: LookupException発生
	 */
	public void testRequireNonBindedDomainFileSystem() {
		try {
			Lookup lookup = LookupFactory.getLookup(LookupFactory.TYPE_HASHMAP);
			lookup.lookupDomainFileSystem("lmz2");
			fail();
		} catch(LookupException e) {
			// OK
		}
	}
	/**
	 * 登録されているドメインコントローラーをルックアップ
	 * 期待結果: OK
	 */
	public void testRequireBindedDomainController() throws RemoteException {
		DomainControllerImpl dc = new DomainControllerImpl("abcdefg");
		Lookup lookup = LookupFactory.getLookup(LookupFactory.TYPE_HASHMAP);
		lookup.registerDomainController(dc);

		DomainController dci = lookup.lookupDomainController("abcdefg");

		assertNotNull(dci);
		assertEquals(dci.getName(), "abcdefg");
	}
	public void testRequireBindedDomainFileSystem() throws RemoteException, ConfigException {
		ResourceBundle resource = ResourceBundle.getBundle("dfs_test");
		DfsConfig config = new DfsConfig(resource);

		// デフォルトのルックアップをHASHMAPに固定
		LookupFactory.setDefaultLookupType(LookupFactory.TYPE_HASHMAP);
		Lookup lookup = LookupFactory.getLookup(LookupFactory.TYPE_HASHMAP);

		// 先にドメインコントローラーを登録しておく
		lookup.registerDomainController(new DomainControllerImpl("dc1"));

		// ドメイン情報を適当に登録する
		lookup.lookupDomainController("dc1").join("domain01", new DiskArrayNode());

		DomainFileSystem dfs = new DomainFileSystemImpl(config);
		lookup.registerDomainFileSystem(dfs);

		assertEquals("domain01", lookup.lookupDomainFileSystem("domain01").getNodeId());
	}
}
