/*
 * LOGICAL-PARADOX.ORG
 * Copyright (C)2005 satoshi akabane(akabane@logical-paradox.org)
 * $Id: DomainConnectionTester.java,v 1.2 2005/09/17 17:35:12 rampil Exp $
 */
package org.logical_paradox.vsan.sample;

import java.util.ResourceBundle;

import org.logical_paradox.common.io.RandomAccessFileDelegator;
import org.logical_paradox.common.util.StringUtils;
import org.logical_paradox.vsan.vfi.DistributedRandomAccessFile;


/**
 * サンプルデータライター
 * 適当なデータをドメインファイルシステムに対して書き込みます
 * @author satoshi akabane@logical-paradox.org
 * @version $Revision: 1.2 $
 */
public class DomainConnectionTester {
	public static final String DEFAULT_RESOURCE_PFX = "sampledatawriter";
	private final ResourceBundle resource;

	// constructor
	public DomainConnectionTester() {
		this(DEFAULT_RESOURCE_PFX);
	}
	public DomainConnectionTester(String pfx) {
		resource = getResource(pfx);
	}
	protected ResourceBundle getResource(String pfx) {
		return ResourceBundle.getBundle(pfx);
	}
	// テストケースを実行する
	public void test() throws Exception {
		final String testdata = StringUtils.randomText(14, true);
		RandomAccessFileDelegator file = new DistributedRandomAccessFile(resource.getString("domain"), "sample");

		file.seek(0);

		// 元のデータを退避する
		log("元のデータを退避しています..");
		byte[] bb = new byte[testdata.length()];
		file.read(bb);

		// テストデータを書き込む
		log("テストデータを書き込んでいます..");
		System.out.println("開始=" + System.currentTimeMillis());
		for(int i = 0; i < 1000; i++) {
			file.seek(0);
			file.write(testdata.getBytes());
		}
		System.out.println("終了=" + System.currentTimeMillis());

		// テストデータを読み込む
		log("テストデータを読み込んでいます..");
		file.seek(0);
		byte[] td = new byte[testdata.length()];
		int rb = file.read(td);

		// 検証
		log("テストデータを検証しています..");
		System.out.println("データ長 : " + rb + " ... " + (rb == testdata.length()));
		System.out.println("データ   : " + new String(td).trim() + " ... " + (testdata.equals(new String(td).trim())));

		// 元のデータを書き込む
		log("テストデータを削除しています..");
		file.seek(0);
		file.write(bb);

		file.close();

		log("テスト終了");
	}
	private void log(String msg) {
		System.out.println(msg);
	}
	// main method
	public static final void main(String[] args) throws Exception {
		DomainConnectionTester dataWriter = new DomainConnectionTester();
		dataWriter.test();
	}
}
