package net.i2p.sam;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;

import net.i2p.data.DataHelper;
import net.i2p.util.Log;

public class TestHello {
    private static Log _log = new Log(TestHello.class);
    
    private static void runTest(String samHost, int samPort) {
        testValidVersion(samHost, samPort);
        testInvalidVersion(samHost, samPort);
        testCorruptLine(samHost, samPort);
    }
    
    private static void testValidVersion(String host, int port) {
        _log.info("\n\nTesting valid version (should come back with an OK)\n\n\n");
        try {
            Socket s = new Socket(host, port);
            OutputStream out = s.getOutputStream();
            out.write(DataHelper.getASCII("HELLO VERSION MIN=1.0 MAX=1.0\n"));
            BufferedReader reader = new BufferedReader(new InputStreamReader(s.getInputStream()));
            String line = reader.readLine();
            _log.info("line read for valid version: " + line);
            s.close();
        } catch (Exception e) {
            _log.error("Error testing for valid version", e);
        }
    }
    
    private static void testInvalidVersion(String host, int port) {
        _log.info("\n\nTesting invalid version (should come back with an error)\n\n\n");
        try {
            Socket s = new Socket(host, port);
            OutputStream out = s.getOutputStream();
            out.write(DataHelper.getASCII("HELLO VERSION MIN=9.0 MAX=8.3\n"));
            BufferedReader reader = new BufferedReader(new InputStreamReader(s.getInputStream()));
            String line = reader.readLine();
            _log.info("line read for invalid version: " + line);
            s.close();
        } catch (Exception e) {
            _log.error("Error testing for valid version", e);
        }
    }
        
    private static void testCorruptLine(String host, int port) {
        _log.info("\n\nTesting corrupt line (should come back with an error)\n\n\n");
        try {
            Socket s = new Socket(host, port);
            OutputStream out = s.getOutputStream();
            out.write(DataHelper.getASCII("HELLO h0 h0 h0\n"));
            BufferedReader reader = new BufferedReader(new InputStreamReader(s.getInputStream()));
            String line = reader.readLine();
            _log.info("line read for valid version: " + line);
            s.close();
        } catch (Exception e) {
            _log.error("Error testing for valid version", e);
        }
    }

    
    public static void main(String args[]) {
        try {
            TestUtil.startupBridge(6000);
            runTest("localhost", 6000);
        } catch (Throwable t) {
            _log.error("Error running test", t);
        }
        try { Thread.sleep(5*1000); } catch (InterruptedException ie) {}
        System.exit(0);
    }
}