2 * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.protocol.bmp.mock;
11 import static org.opendaylight.protocol.util.InetSocketAddressUtil.getInetSocketAddress;
13 import ch.qos.logback.classic.Level;
14 import com.google.common.net.InetAddresses;
15 import java.net.InetAddress;
16 import java.net.InetSocketAddress;
17 import net.sourceforge.argparse4j.ArgumentParsers;
18 import net.sourceforge.argparse4j.impl.Arguments;
19 import net.sourceforge.argparse4j.inf.Argument;
20 import net.sourceforge.argparse4j.inf.ArgumentParser;
21 import net.sourceforge.argparse4j.inf.ArgumentParserException;
22 import net.sourceforge.argparse4j.inf.ArgumentType;
23 import net.sourceforge.argparse4j.inf.Namespace;
24 import org.opendaylight.protocol.util.ArgumentsInput;
26 public final class BmpMockArguments implements ArgumentsInput {
28 private static final int DEFAULT_LOCAL_PORT = 0;
29 private static final int DEFAULT_REMOTE_PORT = 12345;
30 private static final InetAddress LOCALHOST = InetAddresses.forString("127.0.0.1");
32 private static final InetSocketAddress REMOTE_ADDRESS = new InetSocketAddress(LOCALHOST, DEFAULT_REMOTE_PORT);
33 private static final InetSocketAddress LOCAL_ADDRESS = new InetSocketAddress(LOCALHOST, DEFAULT_LOCAL_PORT);
35 private static final String PROGRAM_NAME = "BGP Monitoring Protocol testing tool.";
36 private static final String ARG_PREFIX = "--";
37 private static final String ROUTERS_COUNT_DST = "routers_count";
38 private static final String PEERS_COUNT_DST = "peers_count";
39 private static final String PRE_POLICY_ROUTES_COUNT_DST = "pre_policy_routes";
40 private static final String POST_POLICY_ROUTES_COUNT_DST = "post_policy_routes";
41 private static final String LOCAL_ADDRESS_DST = "local_address";
42 private static final String REMOTE_ADDRESS_DST = "remote_address";
43 private static final String LOG_LEVEL_DST = "log_level";
44 // when set to true, the mock will operate as a server listening for incoming active monitoring request
45 private static final String PASSIVE_MODE_DST = "passive";
47 private static final ArgumentParser ARGUMENT_PARSER = initializeArgumentParser();
49 private final Namespace parseArgs;
51 private BmpMockArguments(final Namespace parseArgs) {
52 this.parseArgs = parseArgs;
55 public static BmpMockArguments parseArguments(final String[] args) {
57 final Namespace namespace = ARGUMENT_PARSER.parseArgs(args);
58 return new BmpMockArguments(namespace);
59 } catch (final ArgumentParserException e) {
60 throw new IllegalArgumentException(e);
64 public int getRoutersCount() {
65 return this.parseArgs.getInt(ROUTERS_COUNT_DST);
68 public int getPeersCount() {
69 return this.parseArgs.getInt(PEERS_COUNT_DST);
72 public int getPrePolicyRoutesCount() {
73 return this.parseArgs.getInt(PRE_POLICY_ROUTES_COUNT_DST);
76 public int getPostPolicyRoutesCount() {
77 return this.parseArgs.getInt(POST_POLICY_ROUTES_COUNT_DST);
80 public InetSocketAddress getLocalAddress() {
81 return this.parseArgs.get(LOCAL_ADDRESS_DST);
84 public InetSocketAddress getRemoteAddress() {
85 return this.parseArgs.get(REMOTE_ADDRESS_DST);
89 public Level getLogLevel() {
90 return this.parseArgs.get(LOG_LEVEL_DST);
93 public boolean isOnPassiveMode() {
94 return this.parseArgs.get(PASSIVE_MODE_DST);
97 private static ArgumentParser initializeArgumentParser() {
98 final ArgumentParser parser = ArgumentParsers.newArgumentParser(PROGRAM_NAME);
99 parser.addArgument(toArgName(ROUTERS_COUNT_DST)).type(Integer.class).setDefault(1);
100 parser.addArgument(toArgName(PEERS_COUNT_DST)).type(Integer.class).setDefault(0);
101 parser.addArgument(toArgName(PRE_POLICY_ROUTES_COUNT_DST)).type(Integer.class).setDefault(0);
102 parser.addArgument(toArgName(POST_POLICY_ROUTES_COUNT_DST)).type(Integer.class).setDefault(0);
103 parser.addArgument(toArgName(PASSIVE_MODE_DST)).action(Arguments.storeTrue());
104 parser.addArgument(toArgName(LOCAL_ADDRESS_DST)).type(new ArgumentType<InetSocketAddress>() {
106 public InetSocketAddress convert(final ArgumentParser parser, final Argument arg, final String value)
107 throws ArgumentParserException {
108 return getInetSocketAddress(value, DEFAULT_LOCAL_PORT);
110 }).setDefault(LOCAL_ADDRESS);
111 parser.addArgument(toArgName(REMOTE_ADDRESS_DST)).type(new ArgumentType<InetSocketAddress>() {
113 public InetSocketAddress convert(final ArgumentParser parser, final Argument arg, final String value)
114 throws ArgumentParserException {
115 return getInetSocketAddress(value, DEFAULT_REMOTE_PORT);
117 }).setDefault(REMOTE_ADDRESS);
118 parser.addArgument(toArgName(LOG_LEVEL_DST)).type(new ArgumentType<Level>(){
120 public Level convert(final ArgumentParser parser, final Argument arg, final String value) throws ArgumentParserException {
121 return Level.toLevel(value);
122 }}).setDefault(Level.INFO);
126 private static String toArgName(final String dst) {
127 return ARG_PREFIX + dst;