100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair/*
200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * Copyright 2009 the original author or authors.
300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair *
400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * Licensed under the Apache License, Version 2.0 (the "License");
500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * you may not use this file except in compliance with the License.
600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * You may obtain a copy of the License at
700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair *
800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair *      http://www.apache.org/licenses/LICENSE-2.0
900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair *
1000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * Unless required by applicable law or agreed to in writing, software
1100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * distributed under the License is distributed on an "AS IS" BASIS,
1200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * See the License for the specific language governing permissions and
1400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * limitations under the License.
1500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair */
1600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismairpackage org.mockftpserver.fake.command
1700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair
1800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismairimport org.mockftpserver.core.command.Command
1900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismairimport org.mockftpserver.core.command.CommandHandler
2000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismairimport org.mockftpserver.core.command.CommandNames
2100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismairimport org.mockftpserver.core.command.ReplyCodes
2200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair
2300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair/**
2400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * Tests for PortCommandHandler
2500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair *
2600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * @version $Revision$ - $Date$
2700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair *
2800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * @author Chris Mair
2900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair */
3000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismairclass EprtCommandHandlerTest extends AbstractFakeCommandHandlerTestCase {
3100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair
3200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair    static final PARAMETERS_IPV4 = ["|1|132.235.1.2|6275|"]
3300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair    static final HOST_IPV4 = InetAddress.getByName("132.235.1.2")
3400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair    static final PARAMETERS_IPV6 = ["|2|1080::8:800:200C:417A|6275|"]
3500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair    static final HOST_IPV6 = InetAddress.getByName("1080::8:800:200C:417A")
3600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair    static final PORT = 6275
3700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair
3800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair    boolean testNotLoggedIn = false
3900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair
4000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair    void testHandleCommand_IPv4() {
4100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair        handleCommand(PARAMETERS_IPV4)
4200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair        assertSessionReply(ReplyCodes.EPRT_OK, 'eprt')
4300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair        assert session.clientDataHost == HOST_IPV4
4400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair        assert session.clientDataPort == PORT
4500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair    }
4600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair
4700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair    void testHandleCommand_IPv6() {
4800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair        handleCommand(PARAMETERS_IPV6)
4900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair        assertSessionReply(ReplyCodes.EPRT_OK, 'eprt')
5000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair        assert session.clientDataHost == HOST_IPV6
5100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair        assert session.clientDataPort == PORT
5200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair    }
5300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair
5400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair    void testHandleCommand_IPv6_CustomDelimiter() {
5500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair        handleCommand(["@2@1080::8:800:200C:417A@6275@"])
5600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair        assertSessionReply(ReplyCodes.EPRT_OK, 'eprt')
5700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair        assert session.clientDataHost == HOST_IPV6
5800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair        assert session.clientDataPort == PORT
5900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair    }
6000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair
6100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair    void testHandleCommand_IllegalParameterFormat() {
6200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair        handleCommand(['abcdef'])
6300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair        assertSessionReply(ReplyCodes.COMMAND_SYNTAX_ERROR)
6400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair    }
6500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair
6600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair    void testHandleCommand_PortMissing() {
6700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair        handleCommand(['|1|132.235.1.2|'])
6800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair        assertSessionReply(ReplyCodes.COMMAND_SYNTAX_ERROR)
6900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair    }
7000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair
7100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair    void testHandleCommand_IllegalHostName() {
7200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair        handleCommand(['|1|132.@|6275|'])
7300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair        assertSessionReply(ReplyCodes.COMMAND_SYNTAX_ERROR)
7400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair    }
7500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair
7600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair    void testHandleCommand_MissingRequiredParameter() {
7700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair        testHandleCommand_MissingRequiredParameter([])
7800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair    }
7900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair
8000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair    //-------------------------------------------------------------------------
8100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair    // Helper Methods
8200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair    //-------------------------------------------------------------------------
8300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair
8400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair    void setUp() {
8500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair        super.setUp()
8600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair    }
8700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair
8800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair    CommandHandler createCommandHandler() {
8900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair        new EprtCommandHandler()
9000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair    }
9100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair
9200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair    Command createValidCommand() {
9300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair        return new Command(CommandNames.EPRT, PARAMETERS_IPV4)
9400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair    }
9500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair
9600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair}