001 /* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 package org.apache.commons.net.time; 018 019 import java.net.InetAddress; 020 import java.util.Calendar; 021 import java.io.IOException; 022 import java.util.TimeZone; 023 024 import junit.framework.TestCase; 025 026 public class TimeTCPClientTest extends TestCase 027 { 028 private TimeTestSimpleServer server1; 029 030 private int _port = 3333; // default test port 031 032 /*** 033 * main for running the test. 034 ***/ 035 public static void main(String[] args) 036 { 037 junit.textui.TestRunner.run(TimeTCPClientTest.class); 038 } 039 040 /*** 041 * open connections needed for the tests for the test. 042 ***/ 043 protected void openConnections() throws Exception 044 { 045 try { 046 server1 = new TimeTestSimpleServer(_port); 047 server1.connect(); 048 } catch (IOException ioe) 049 { 050 // try again on another port 051 _port = 4000; 052 server1 = new TimeTestSimpleServer(_port); 053 server1.connect(); 054 } 055 server1.start(); 056 } 057 058 /*** 059 * tests the constant basetime used by TimeClient against tha 060 * computed from Calendar class. 061 */ 062 public void testInitial() { 063 TimeZone utcZone = TimeZone.getTimeZone("UTC"); 064 Calendar calendar = Calendar.getInstance(utcZone); 065 calendar.set(1900, Calendar.JANUARY, 1, 0, 0, 0); 066 calendar.set(Calendar.MILLISECOND, 0); 067 long baseTime = calendar.getTime().getTime() / 1000L; 068 069 assertTrue(baseTime == -TimeTCPClient.SECONDS_1900_TO_1970); 070 } 071 072 /*** 073 * tests the times retrieved via the Time protocol implementation. 074 ***/ 075 public void testCompareTimes() throws Exception 076 { 077 openConnections(); 078 079 long time, time2; 080 long clientTime, clientTime2; 081 try 082 { 083 TimeTCPClient client = new TimeTCPClient(); 084 try 085 { 086 // We want to timeout if a response takes longer than 60 seconds 087 client.setDefaultTimeout(60000); 088 client.connect(InetAddress.getLocalHost(), _port); 089 clientTime = client.getDate().getTime(); 090 time = System.currentTimeMillis(); 091 } finally 092 { 093 if(client.isConnected()) 094 client.disconnect(); 095 } 096 097 try 098 { 099 // We want to timeout if a response takes longer than 60 seconds 100 client.setDefaultTimeout(60000); 101 client.connect(InetAddress.getLocalHost(), _port); 102 clientTime2 = (client.getTime() - TimeTCPClient.SECONDS_1900_TO_1970)*1000L; 103 time2 = System.currentTimeMillis(); 104 } finally 105 { 106 if(client.isConnected()) 107 client.disconnect(); 108 } 109 110 } finally 111 { 112 closeConnections(); 113 } 114 115 // current time shouldn't differ from time reported via network by 5 seconds 116 assertTrue(Math.abs(time - clientTime) < 5000); 117 assertTrue(Math.abs(time2 - clientTime2) < 5000); 118 } 119 120 /*** 121 * closes all the connections 122 ***/ 123 protected void closeConnections() 124 { 125 try 126 { 127 server1.stop(); 128 Thread.sleep(1000); 129 } catch (Exception e) 130 { 131 } 132 } 133 } 134