http://git-wip-us.apache.org/repos/asf/jclouds/blob/de2e5e01/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/firewall/FirewallResponseHandler.java ---------------------------------------------------------------------- diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/firewall/FirewallResponseHandler.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/firewall/FirewallResponseHandler.java new file mode 100644 index 0000000..dae5191 --- /dev/null +++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/firewall/FirewallResponseHandler.java @@ -0,0 +1,63 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.profitbricks.http.parser.firewall; + +import com.google.inject.Inject; + +import org.jclouds.profitbricks.domain.Firewall; +import org.jclouds.profitbricks.http.parser.firewall.rule.FirewallRuleListResponseHandler; +import org.xml.sax.SAXException; + +public class FirewallResponseHandler extends BaseFirewallResponseHandler<Firewall> { + + private boolean done = false; + + @Inject + FirewallResponseHandler(FirewallRuleListResponseHandler firewallRuleListResponseHandler) { + super(firewallRuleListResponseHandler); + } + + @Override + public void endElement(String uri, String localName, String qName) throws SAXException { + if (done) + return; + + if (useFirewallRuleParser) + firewallRuleListResponseHandler.endElement(uri, localName, qName); + else { + setPropertyOnEndTag(qName); + if ("return".equals(qName)) { + done = true; + builder.rules(firewallRuleListResponseHandler.getResult()); + } + clearTextBuffer(); + } + + if ("firewallRules".equals(qName)) + useFirewallRuleParser = false; + } + + @Override + public void reset() { + this.builder = Firewall.builder(); + } + + @Override + public Firewall getResult() { + return builder.build(); + } +}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/de2e5e01/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/firewall/rule/BaseFirewallRuleResponseHandler.java ---------------------------------------------------------------------- diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/firewall/rule/BaseFirewallRuleResponseHandler.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/firewall/rule/BaseFirewallRuleResponseHandler.java new file mode 100644 index 0000000..9461f46 --- /dev/null +++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/firewall/rule/BaseFirewallRuleResponseHandler.java @@ -0,0 +1,54 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.profitbricks.http.parser.firewall.rule; + +import org.jclouds.profitbricks.domain.Firewall; +import org.jclouds.profitbricks.domain.Firewall.Protocol; + +import com.google.inject.Inject; + +import org.jclouds.profitbricks.http.parser.BaseProfitBricksResponseHandler; + +public abstract class BaseFirewallRuleResponseHandler<T> extends BaseProfitBricksResponseHandler<T> { + + protected Firewall.Rule.Builder builder; + + @Inject + BaseFirewallRuleResponseHandler() { + this.builder = Firewall.Rule.builder(); + } + + @Override + protected void setPropertyOnEndTag(String qName) { + if ("firewallRuleId".equals(qName)) + builder.id(textToStringValue()); + else if ("name".equals(qName)) + builder.name(textToStringValue()); + else if ("portRangeEnd".equals(qName)) + builder.portRangeEnd(textToIntValue()); + else if ("portRangeStart".equals(qName)) + builder.portRangeStart(textToIntValue()); + else if ("protocol".equals(qName)) + builder.protocol(Protocol.fromValue(textToStringValue())); + else if ("sourceIp".equals(qName)) + builder.sourceIp(textToStringValue()); + else if ("sourceMac".equals(qName)) + builder.sourceMac(textToStringValue()); + else if ("targetIp".equals(qName)) + builder.targetIp(textToStringValue()); + } +} http://git-wip-us.apache.org/repos/asf/jclouds/blob/de2e5e01/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/firewall/rule/FirewallRuleListResponseHandler.java ---------------------------------------------------------------------- diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/firewall/rule/FirewallRuleListResponseHandler.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/firewall/rule/FirewallRuleListResponseHandler.java new file mode 100644 index 0000000..3085839 --- /dev/null +++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/firewall/rule/FirewallRuleListResponseHandler.java @@ -0,0 +1,54 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.profitbricks.http.parser.firewall.rule; + +import java.util.List; + +import org.jclouds.profitbricks.domain.Firewall.Rule; +import org.xml.sax.SAXException; + +import com.google.common.collect.Lists; + +public class FirewallRuleListResponseHandler extends BaseFirewallRuleResponseHandler<List<Rule>> { + + private List<Rule> rules; + + FirewallRuleListResponseHandler() { + this.rules = Lists.newArrayList(); + } + + @Override + public void endElement(String uri, String localName, String qName) throws SAXException { + setPropertyOnEndTag(qName); + + if ("firewallRules".equals(qName)) + rules.add(builder.build()); + clearTextBuffer(); + + } + + @Override + public void reset() { + this.rules = Lists.newArrayList(); + } + + @Override + public List<Rule> getResult() { + return rules; + } + +} http://git-wip-us.apache.org/repos/asf/jclouds/blob/de2e5e01/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/nic/BaseNicResponseHandler.java ---------------------------------------------------------------------- diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/nic/BaseNicResponseHandler.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/nic/BaseNicResponseHandler.java new file mode 100644 index 0000000..83efca3 --- /dev/null +++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/nic/BaseNicResponseHandler.java @@ -0,0 +1,82 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.profitbricks.http.parser.nic; + +import com.google.inject.Inject; + +import org.jclouds.profitbricks.domain.Nic; +import org.jclouds.profitbricks.domain.ProvisioningState; +import org.jclouds.profitbricks.http.parser.BaseProfitBricksResponseHandler; +import org.jclouds.profitbricks.http.parser.firewall.FirewallResponseHandler; +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + +public abstract class BaseNicResponseHandler<T> extends BaseProfitBricksResponseHandler<T> { + + protected final FirewallResponseHandler firewallResponseHandler; + + protected boolean useFirewallParser = false; + protected Nic.Builder builder; + + @Inject + BaseNicResponseHandler(FirewallResponseHandler firewallResponseHandler) { + this.builder = Nic.builder(); + this.firewallResponseHandler = firewallResponseHandler; + } + + @Override + public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { + if ("firewall".equals(qName)) + useFirewallParser = true; + if (useFirewallParser) + firewallResponseHandler.startElement(uri, localName, qName, attributes); + } + + @Override + public void characters(char[] ch, int start, int length) { + if (useFirewallParser) + firewallResponseHandler.characters(ch, start, length); + else + super.characters(ch, start, length); + } + + @Override + protected void setPropertyOnEndTag(String qName) { + if ("dataCenterId".equals(qName)) + builder.dataCenterId(textToStringValue()); + else if ("nicName".equals(qName)) + builder.name(textToStringValue()); + else if ("nicId".equals(qName)) + builder.id(textToStringValue()); + else if ("lanId".equals(qName)) + builder.lanId(textToIntValue()); + else if ("internetAccess".equals(qName)) + builder.internetAccess(textToBooleanValue()); + else if ("serverId".equals(qName)) + builder.serverId(textToStringValue()); + else if ("ips".equals(qName)) + builder.ip(textToStringValue()); + else if ("macAddress".equals(qName)) + builder.macAddress(textToStringValue()); + else if ("dhcpActive".equals(qName)) + builder.dhcpActive(textToBooleanValue()); + else if ("gatewayIp".equals(qName)) + builder.gatewayIp(textToStringValue()); + else if ("provisioningState".equals(qName)) + builder.state(ProvisioningState.fromValue(textToStringValue())); + } +} http://git-wip-us.apache.org/repos/asf/jclouds/blob/de2e5e01/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/nic/NicListResponseHandler.java ---------------------------------------------------------------------- diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/nic/NicListResponseHandler.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/nic/NicListResponseHandler.java new file mode 100644 index 0000000..3d17c97 --- /dev/null +++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/nic/NicListResponseHandler.java @@ -0,0 +1,65 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.profitbricks.http.parser.nic; + +import autovalue.shaded.com.google.common.common.collect.Lists; +import com.google.inject.Inject; +import org.jclouds.profitbricks.domain.Nic; +import org.xml.sax.SAXException; + +import java.util.List; +import org.jclouds.profitbricks.http.parser.firewall.FirewallResponseHandler; + +public class NicListResponseHandler extends BaseNicResponseHandler<List<Nic>> { + + private List<Nic> nics; + + @Inject + public NicListResponseHandler(FirewallResponseHandler firewallResponseHandler) { + super(firewallResponseHandler); + this.nics = Lists.newArrayList(); + } + + @Override + public void endElement(String uri, String localName, String qName) throws SAXException { + if (useFirewallParser) + firewallResponseHandler.endElement(uri, localName, qName); + else { + setPropertyOnEndTag(qName); + if ("return".equals(qName) || "nics".equals(qName)) { + nics.add(builder + .firewall(firewallResponseHandler.getResult()) + .build()); + builder = Nic.builder(); + } + clearTextBuffer(); + } + + if ("firewall".equals(qName)) + useFirewallParser = false; + } + + @Override + public void reset() { + this.nics = Lists.newArrayList(); + } + + @Override + public List<Nic> getResult() { + return nics; + } +} http://git-wip-us.apache.org/repos/asf/jclouds/blob/de2e5e01/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/nic/NicResponseHandler.java ---------------------------------------------------------------------- diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/nic/NicResponseHandler.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/nic/NicResponseHandler.java new file mode 100644 index 0000000..690ecc1 --- /dev/null +++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/nic/NicResponseHandler.java @@ -0,0 +1,58 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.profitbricks.http.parser.nic; + +import com.google.inject.Inject; +import org.jclouds.profitbricks.domain.Nic; +import org.jclouds.profitbricks.http.parser.firewall.FirewallResponseHandler; +import org.xml.sax.SAXException; + +public class NicResponseHandler extends BaseNicResponseHandler<Nic> { + + private boolean done = false; + + @Inject + public NicResponseHandler(FirewallResponseHandler firewallResponseHandler) { + super(firewallResponseHandler); + } + + @Override + public void endElement(String uri, String localName, String qName) throws SAXException { + if (done) + return; + + if (useFirewallParser) + firewallResponseHandler.endElement(uri, localName, qName); + else { + setPropertyOnEndTag(qName); + if ("return".equals(qName)) { + done = true; + builder.firewall(firewallResponseHandler.getResult()); + firewallResponseHandler.reset(); + } + clearTextBuffer(); + } + + if ("firewall".equals(qName)) + useFirewallParser = false; + } + + @Override + public Nic getResult() { + return builder.build(); + } +} http://git-wip-us.apache.org/repos/asf/jclouds/blob/de2e5e01/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/server/BaseServerResponseHandler.java ---------------------------------------------------------------------- diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/server/BaseServerResponseHandler.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/server/BaseServerResponseHandler.java index 356d218..69a34b1 100644 --- a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/server/BaseServerResponseHandler.java +++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/server/BaseServerResponseHandler.java @@ -28,19 +28,57 @@ import org.jclouds.profitbricks.domain.OsType; import org.jclouds.profitbricks.domain.ProvisioningState; import org.jclouds.profitbricks.domain.Server; import org.jclouds.profitbricks.http.parser.BaseProfitBricksResponseHandler; +import org.jclouds.profitbricks.http.parser.nic.NicListResponseHandler; +import org.jclouds.profitbricks.http.parser.storage.StorageListResponseHandler; +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; public abstract class BaseServerResponseHandler<T> extends BaseProfitBricksResponseHandler<T> { + protected final StorageListResponseHandler storageListResponseHandler; + protected final NicListResponseHandler nicListResponseHandler; + protected Server.DescribingBuilder builder; protected final DateCodec dateCodec; + protected boolean useStorageParser = false; + protected boolean useNicParser = false; + @Inject - BaseServerResponseHandler(DateCodecFactory dateCodec) { + BaseServerResponseHandler(DateCodecFactory dateCodec, StorageListResponseHandler storageListResponseHandler, + NicListResponseHandler nicListResponseHandler) { this.dateCodec = dateCodec.iso8601(); + this.storageListResponseHandler = storageListResponseHandler; + this.nicListResponseHandler = nicListResponseHandler; this.builder = Server.builder(); } + @Override + public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { + if ("connectedStorages".equals(qName)) + useStorageParser = true; + else if ("nics".equals(qName)) + useNicParser = true; + + if (useStorageParser) + storageListResponseHandler.startElement(uri, localName, qName, attributes); + else if (useNicParser) + nicListResponseHandler.startElement(uri, localName, qName, attributes); + else + super.startElement(uri, localName, qName, attributes); + } + + @Override + public void characters(char[] ch, int start, int length) { + if (useStorageParser) + storageListResponseHandler.characters(ch, start, length); + else if (useNicParser) + nicListResponseHandler.characters(ch, start, length); + else + super.characters(ch, start, length); + } + protected final Date textToIso8601Date() { return dateCodec.toDate(textToStringValue()); } http://git-wip-us.apache.org/repos/asf/jclouds/blob/de2e5e01/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/server/ServerInfoResponseHandler.java ---------------------------------------------------------------------- diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/server/ServerInfoResponseHandler.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/server/ServerInfoResponseHandler.java index 3dc6e6e..68ee696 100644 --- a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/server/ServerInfoResponseHandler.java +++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/server/ServerInfoResponseHandler.java @@ -17,8 +17,11 @@ package org.jclouds.profitbricks.http.parser.server; import com.google.inject.Inject; + import org.jclouds.date.DateCodecFactory; import org.jclouds.profitbricks.domain.Server; +import org.jclouds.profitbricks.http.parser.nic.NicListResponseHandler; +import org.jclouds.profitbricks.http.parser.storage.StorageListResponseHandler; import org.xml.sax.SAXException; public class ServerInfoResponseHandler extends BaseServerResponseHandler<Server> { @@ -26,18 +29,35 @@ public class ServerInfoResponseHandler extends BaseServerResponseHandler<Server> private boolean done = false; @Inject - ServerInfoResponseHandler(DateCodecFactory dateCodec) { - super(dateCodec); + ServerInfoResponseHandler(DateCodecFactory dateCodec, StorageListResponseHandler storageListResponseHandler, + NicListResponseHandler nicListResponseHandler) { + super(dateCodec, storageListResponseHandler, nicListResponseHandler); } @Override public void endElement(String uri, String localName, String qName) throws SAXException { if (done) return; - setPropertyOnEndTag(qName); - if ("return".equals(qName)) - done = true; - clearTextBuffer(); + + if (useStorageParser) + storageListResponseHandler.endElement(uri, localName, qName); + else if (useNicParser) + nicListResponseHandler.endElement(uri, localName, qName); + else { + setPropertyOnEndTag(qName); + if ("return".equals(qName)) { + done = true; + builder + .storages(storageListResponseHandler.getResult()) + .nics(nicListResponseHandler.getResult()); + } + clearTextBuffer(); + } + + if ("connectedStorages".equals(qName)) + useStorageParser = false; + else if ("nics".equals(qName)) + useNicParser = false; } @Override http://git-wip-us.apache.org/repos/asf/jclouds/blob/de2e5e01/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/server/ServerListResponseHandler.java ---------------------------------------------------------------------- diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/server/ServerListResponseHandler.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/server/ServerListResponseHandler.java index f0fcd3f..d7d50ab 100644 --- a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/server/ServerListResponseHandler.java +++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/server/ServerListResponseHandler.java @@ -18,29 +18,57 @@ package org.jclouds.profitbricks.http.parser.server; import com.google.common.collect.Lists; import com.google.inject.Inject; + import java.util.List; + import org.jclouds.date.DateCodecFactory; import org.jclouds.profitbricks.domain.Server; +import org.jclouds.profitbricks.http.parser.nic.NicListResponseHandler; +import org.jclouds.profitbricks.http.parser.storage.StorageListResponseHandler; import org.xml.sax.SAXException; public class ServerListResponseHandler extends BaseServerResponseHandler<List<Server>> { - private final List<Server> servers; + private List<Server> servers; @Inject - ServerListResponseHandler(DateCodecFactory dateCodec) { - super(dateCodec); + ServerListResponseHandler(DateCodecFactory dateCodec, StorageListResponseHandler storageListResponseHandler, + NicListResponseHandler nicListResponseHandler) { + super(dateCodec, storageListResponseHandler, nicListResponseHandler); this.servers = Lists.newArrayList(); } @Override public void endElement(String uri, String localName, String qName) throws SAXException { - setPropertyOnEndTag(qName); - if ("return".equals(qName)) { - servers.add(builder.build()); - builder = Server.builder(); + + if (useStorageParser) + storageListResponseHandler.endElement(uri, localName, qName); + else if (useNicParser) + nicListResponseHandler.endElement(uri, localName, qName); + else { + setPropertyOnEndTag(qName); + if ("return".equals(qName) || "servers".equals(qName)) { + servers.add(builder + .storages(storageListResponseHandler.getResult()) + .nics(nicListResponseHandler.getResult()) + .build()); + storageListResponseHandler.reset(); + nicListResponseHandler.reset(); + + builder = Server.builder(); + } + clearTextBuffer(); } - clearTextBuffer(); + + if ("connectedStorages".equals(qName)) + useStorageParser = false; + else if ("nics".equals(qName)) + useNicParser = false; + } + + @Override + public void reset() { + this.servers = Lists.newArrayList(); } @Override http://git-wip-us.apache.org/repos/asf/jclouds/blob/de2e5e01/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/storage/StorageListResponseHandler.java ---------------------------------------------------------------------- diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/storage/StorageListResponseHandler.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/storage/StorageListResponseHandler.java index fe5e3fa..d590c80 100644 --- a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/storage/StorageListResponseHandler.java +++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/storage/StorageListResponseHandler.java @@ -25,7 +25,7 @@ import org.xml.sax.SAXException; public class StorageListResponseHandler extends BaseStorageResponseHandler<List<Storage>> { - private final List<Storage> storages; + private List<Storage> storages; @Inject StorageListResponseHandler(DateCodecFactory dateCodec) { @@ -36,7 +36,7 @@ public class StorageListResponseHandler extends BaseStorageResponseHandler<List< @Override public void endElement(String uri, String localName, String qName) throws SAXException { setPropertyOnEndTag(qName); - if ("return".equals(qName)) { + if ("return".equals(qName) || "connectedStorages".equals(qName) || "storages".equals(qName)) { storages.add(builder .serverIds(serverIds) .build()); @@ -47,6 +47,11 @@ public class StorageListResponseHandler extends BaseStorageResponseHandler<List< } @Override + public void reset() { + this.storages = Lists.newArrayList(); + } + + @Override public List<Storage> getResult() { return storages; } http://git-wip-us.apache.org/repos/asf/jclouds/blob/de2e5e01/providers/profitbricks/src/main/java/org/jclouds/profitbricks/util/MacAddresses.java ---------------------------------------------------------------------- diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/util/MacAddresses.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/util/MacAddresses.java new file mode 100644 index 0000000..5725e4b --- /dev/null +++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/util/MacAddresses.java @@ -0,0 +1,29 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.profitbricks.util; + +import java.util.regex.Pattern; + +public class MacAddresses { + + private static final String MAC_ADDR_FORMAT = "^([0-9a-f]{2}[:]){5}([0-9a-f]{2})$"; + private static final Pattern MAC_ADDR_PATTERN = Pattern.compile(MAC_ADDR_FORMAT); + + public static boolean isMacAddress(String in) { + return MAC_ADDR_PATTERN.matcher(in).matches(); + } +} http://git-wip-us.apache.org/repos/asf/jclouds/blob/de2e5e01/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/firewall/AddFirewallRuleToNicRequestBinderTest.java ---------------------------------------------------------------------- diff --git a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/firewall/AddFirewallRuleToNicRequestBinderTest.java b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/firewall/AddFirewallRuleToNicRequestBinderTest.java new file mode 100644 index 0000000..daedc36 --- /dev/null +++ b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/firewall/AddFirewallRuleToNicRequestBinderTest.java @@ -0,0 +1,64 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.profitbricks.binder.firewall; + +import org.jclouds.profitbricks.domain.Firewall; + +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNotNull; + +import org.jclouds.profitbricks.domain.Firewall.Protocol; +import org.testng.annotations.Test; + +@Test(groups = "unit", testName = "AddFirewallRuleToNicRequestBinderTest") +public class AddFirewallRuleToNicRequestBinderTest { + + @Test + public void testCreatePayload() { + AddFirewallRuleToNicRequestBinder binder = new AddFirewallRuleToNicRequestBinder(); + + Firewall.Request.AddRulePayload payload = Firewall.Request.ruleAddingBuilder() + .nicId("nic-id") + .newRule() + .name("name") + .portRangeEnd(45678) + .portRangeStart(12345) + .protocol(Protocol.TCP) + .sourceIp("192.168.0.1") + .sourceMac("aa:bb:cc:dd:ee:ff") + .targetIp("192.168.0.2") + .endRule() + .build(); + + String actual = binder.createPayload(payload); + assertNotNull(actual, "Binder returned null payload"); + assertEquals(expectedPayload, actual); + } + + private final String expectedPayload = (" <ws:addFirewallRulesToNic>\n" + + " <nicId>nic-id</nicId>\n" + + " <request>\n" + + " <name>name</name>\n" + + " <portRangeEnd>45678</portRangeEnd>\n" + + " <portRangeStart>12345</portRangeStart>\n" + + " <protocol>TCP</protocol>\n" + + " <sourceIp>192.168.0.1</sourceIp>\n" + + " <sourceMac>aa:bb:cc:dd:ee:ff</sourceMac>\n" + + " <targetIp>192.168.0.2</targetIp>\n" + + " </request>\n" + + " </ws:addFirewallRulesToNic>").replaceAll("\\s+", ""); +} http://git-wip-us.apache.org/repos/asf/jclouds/blob/de2e5e01/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/firewall/FirewallBinderTest.java ---------------------------------------------------------------------- diff --git a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/firewall/FirewallBinderTest.java b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/firewall/FirewallBinderTest.java new file mode 100644 index 0000000..e32b788 --- /dev/null +++ b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/firewall/FirewallBinderTest.java @@ -0,0 +1,131 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.profitbricks.binder.firewall; + +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNotNull; + +import java.util.List; + +import org.jclouds.profitbricks.binder.firewall.FirewallBinder.ActivateFirewallRequestBinder; +import org.jclouds.profitbricks.binder.firewall.FirewallBinder.DeactivateFirewallRequestBinder; +import org.jclouds.profitbricks.binder.firewall.FirewallBinder.DeleteFirewallRequestBinder; +import org.jclouds.profitbricks.binder.firewall.FirewallBinder.RemoveFirewallRuleRequestBinder; +import org.testng.annotations.Test; + +import com.google.common.collect.ImmutableList; + +@Test(groups = "unit", testName = "FirewallBinderTest") +public class FirewallBinderTest { + + @Test + public void testActivateFirewallBindPayload() { + ActivateFirewallRequestBinder binder = new ActivateFirewallRequestBinder(); + + List<String> payload = ImmutableList.of( + "firewall-id-1", + "firewall-id-2", + "firewall-id-3", + "firewall-id-4" + ); + + String actual = binder.createPayload(payload); + assertNotNull(actual, "Binder returned null payload"); + + String expected = ("<ws:activateFirewalls>\n" + + " <firewallIds>firewall-id-1</firewallIds>\n" + + " <firewallIds>firewall-id-2</firewallIds>\n" + + " <firewallIds>firewall-id-3</firewallIds>\n" + + " <firewallIds>firewall-id-4</firewallIds>\n" + + " </ws:activateFirewalls>").replaceAll("\\s+", ""); + + assertEquals(actual, expected); + } + + @Test + public void testDeactivateFirewallBindPayload() { + DeactivateFirewallRequestBinder binder = new DeactivateFirewallRequestBinder(); + + List<String> payload = ImmutableList.of( + "firewall-id-1", + "firewall-id-2", + "firewall-id-3", + "firewall-id-4" + ); + + String actual = binder.createPayload(payload); + assertNotNull(actual, "Binder returned null payload"); + + String expected = ("<ws:deactivateFirewalls>\n" + + " <firewallIds>firewall-id-1</firewallIds>\n" + + " <firewallIds>firewall-id-2</firewallIds>\n" + + " <firewallIds>firewall-id-3</firewallIds>\n" + + " <firewallIds>firewall-id-4</firewallIds>\n" + + " </ws:deactivateFirewalls>").replaceAll("\\s+", ""); + + assertEquals(actual, expected); + } + + @Test + public void testDeleteFirewallBindPayload() { + DeleteFirewallRequestBinder binder = new DeleteFirewallRequestBinder(); + + List<String> payload = ImmutableList.of( + "firewall-id-1", + "firewall-id-2", + "firewall-id-3", + "firewall-id-4" + ); + + String actual = binder.createPayload(payload); + assertNotNull(actual, "Binder returned null payload"); + + String expected = ("<ws:deleteFirewalls>\n" + + " <firewallIds>firewall-id-1</firewallIds>\n" + + " <firewallIds>firewall-id-2</firewallIds>\n" + + " <firewallIds>firewall-id-3</firewallIds>\n" + + " <firewallIds>firewall-id-4</firewallIds>\n" + + " </ws:deleteFirewalls>").replaceAll("\\s+", ""); + + assertEquals(actual, expected); + } + + @Test + public void testRemoveFirewallRuleBindPayload() { + RemoveFirewallRuleRequestBinder binder = new RemoveFirewallRuleRequestBinder(); + + List<String> payload = ImmutableList.of( + "firewall-rule-id-1", + "firewall-rule-id-2", + "firewall-rule-id-3", + "firewall-rule-id-4" + ); + + String actual = binder.createPayload(payload); + assertNotNull(actual, "Binder returned null payload"); + + String expected = ("<ws:removeFirewallRules>\n" + + " <firewallRuleIds>firewall-rule-id-1</firewallRuleIds>\n" + + " <firewallRuleIds>firewall-rule-id-2</firewallRuleIds>\n" + + " <firewallRuleIds>firewall-rule-id-3</firewallRuleIds>\n" + + " <firewallRuleIds>firewall-rule-id-4</firewallRuleIds>\n" + + " </ws:removeFirewallRules>").replaceAll("\\s+", ""); + + assertEquals(actual, expected); + } + +} http://git-wip-us.apache.org/repos/asf/jclouds/blob/de2e5e01/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/nic/CreateNicRequestBinderTest.java ---------------------------------------------------------------------- diff --git a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/nic/CreateNicRequestBinderTest.java b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/nic/CreateNicRequestBinderTest.java new file mode 100644 index 0000000..8e2630d --- /dev/null +++ b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/nic/CreateNicRequestBinderTest.java @@ -0,0 +1,53 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.profitbricks.binder.nic; + +import org.jclouds.profitbricks.domain.Nic; +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNotNull; +import org.testng.annotations.Test; + +@Test(groups = "unit", testName = "CreateNicRequestBinderTest") +public class CreateNicRequestBinderTest { + + @Test + public void testCreatePayload() { + CreateNicRequestBinder binder = new CreateNicRequestBinder(); + + Nic.Request.CreatePayload payload = Nic.Request.creatingBuilder() + .ip("192.168.0.1") + .name("nic-name") + .dhcpActive(true) + .serverId("server-id") + .lanId(1) + .build(); + + String actual = binder.createPayload(payload); + assertNotNull(actual, "Binder returned null payload"); + assertEquals(expectedPayload, actual); + } + + private final String expectedPayload = ("<ws:createNic>\n" + + " <request>\n" + + " <ip>192.168.0.1</ip>\n" + + " <nicName>nic-name</nicName>\n" + + " <dhcpActive>true</dhcpActive>\n" + + " <serverId>server-id</serverId>\n" + + " <lanId>1</lanId>\n" + + " </request>\n" + + " </ws:createNic>").replaceAll("\\s+", ""); +} http://git-wip-us.apache.org/repos/asf/jclouds/blob/de2e5e01/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/nic/SetInternetAccessBinderTest.java ---------------------------------------------------------------------- diff --git a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/nic/SetInternetAccessBinderTest.java b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/nic/SetInternetAccessBinderTest.java new file mode 100644 index 0000000..c499c73 --- /dev/null +++ b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/nic/SetInternetAccessBinderTest.java @@ -0,0 +1,48 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.profitbricks.binder.nic; + +import org.jclouds.profitbricks.domain.Nic; +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNotNull; +import org.testng.annotations.Test; + +@Test(groups = "unit", testName = "SetInternetAccessBinderTest") +public class SetInternetAccessBinderTest { + + @Test + public void testCreatePayload() { + SetInternetAccessBinder binder = new SetInternetAccessBinder(); + + Nic.Request.SetInternetAccessPayload payload = Nic.Request.setInternetAccessBuilder() + .dataCenterId("datacenter-id") + .internetAccess(true) + .lanId(1) + .build(); + + String actual = binder.createPayload(payload); + + assertNotNull(actual, "Binder returned null payload"); + assertEquals(expectedPayload, actual); + } + + private final String expectedPayload = (" <ws:setInternetAccess>\n" + + " <dataCenterId>datacenter-id</dataCenterId>\n" + + " <lanId>1</lanId>\n" + + " <internetAccess>true</internetAccess>\n" + + " </ws:setInternetAccess>").replaceAll("\\s+", ""); +} http://git-wip-us.apache.org/repos/asf/jclouds/blob/de2e5e01/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/nic/UpdateNicRequestBinderTest.java ---------------------------------------------------------------------- diff --git a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/nic/UpdateNicRequestBinderTest.java b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/nic/UpdateNicRequestBinderTest.java new file mode 100644 index 0000000..298fea7 --- /dev/null +++ b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/nic/UpdateNicRequestBinderTest.java @@ -0,0 +1,54 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.profitbricks.binder.nic; + +import org.jclouds.profitbricks.domain.Nic; +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNotNull; +import org.testng.annotations.Test; + +@Test(groups = "unit", testName = "UpdateNicRequestBinderTest") +public class UpdateNicRequestBinderTest { + + @Test + public void testCreatePayload() { + UpdateNicRequestBinder binder = new UpdateNicRequestBinder(); + + Nic.Request.UpdatePayload payload = Nic.Request.updatingBuilder() + .id("nic-id") + .ip("192.168.0.1") + .name("nic-name") + .dhcpActive(true) + .lanId(1) + .build(); + + String actual = binder.createPayload(payload); + + assertNotNull(actual, "Binder returned null payload"); + assertEquals(expectedPayload, actual); + } + + private final String expectedPayload = (" <ws:updateNic>\n" + + " <request>\n" + + " <nicId>nic-id</nicId>\n" + + " <ip>192.168.0.1</ip>\n" + + " <nicName>nic-name</nicName>\n" + + " <dhcpActive>true</dhcpActive>\n" + + " <lanId>1</lanId>\n" + + " </request>\n" + + " </ws:updateNic>").replaceAll("\\s+", ""); +} http://git-wip-us.apache.org/repos/asf/jclouds/blob/de2e5e01/providers/profitbricks/src/test/java/org/jclouds/profitbricks/domain/FirewallRuleBuilderTest.java ---------------------------------------------------------------------- diff --git a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/domain/FirewallRuleBuilderTest.java b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/domain/FirewallRuleBuilderTest.java new file mode 100644 index 0000000..af29eae --- /dev/null +++ b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/domain/FirewallRuleBuilderTest.java @@ -0,0 +1,82 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.profitbricks.domain; + +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNull; + +import org.testng.annotations.Test; + +@Test(groups = "unit", testName = "FirewallRuleBuilderTest") +public class FirewallRuleBuilderTest { + + private final String _name = "rule-name"; + private final Integer _portRangeEnd = 45678; + private final Integer _portRangeStart = 12345; + private final Firewall.Protocol _protocol = Firewall.Protocol.TCP; + private final String _sourceIp = "192.168.0.1"; + private final String _sourceMac = "aa:bb:cc:dd:ee:ff"; + private final String _targetIp = "192.168.0.2"; + + private final Integer _icmpType = 2; + private final Integer _icmpCode = 24; + + @Test + public void testAutoValueFirewallRulePropertiesSettingCorrectly() { + Firewall.Rule actual = Firewall.Rule.builder() + .name(_name) + .portRangeEnd(_portRangeEnd) + .portRangeStart(_portRangeStart) + .protocol(_protocol) + .sourceIp(_sourceIp) + .sourceMac(_sourceMac) + .targetIp(_targetIp) + .build(); + + assertEquals(actual.name(), _name); + assertEquals(actual.portRangeEnd(), _portRangeEnd); + assertEquals(actual.portRangeStart(), _portRangeStart); + assertEquals(actual.protocol(), _protocol); + assertEquals(actual.sourceIp(), _sourceIp); + assertEquals(actual.sourceMac(), _sourceMac); + assertEquals(actual.targetIp(), _targetIp); + } + + @Test + public void testAutoValueFirewallRuleWithIcmpPropertiesSettingCorrectly() { + Firewall.RuleWithIcmp actual = Firewall.RuleWithIcmp.builder() + .name(_name) + .icmpCode(_icmpCode) + .icmpType(_icmpType) + .protocol(Firewall.Protocol.ICMP) + .sourceIp(_sourceIp) + .sourceMac(_sourceMac) + .targetIp(_targetIp) + .build(); + + assertEquals(actual.name(), _name); + assertNull(actual.portRangeEnd()); + assertNull(actual.portRangeStart()); + assertEquals(actual.protocol(), Firewall.Protocol.ICMP); + assertEquals(actual.sourceIp(), _sourceIp); + assertEquals(actual.sourceMac(), _sourceMac); + assertEquals(actual.targetIp(), _targetIp); + assertEquals(actual.icmpCode(), _icmpCode); + assertEquals(actual.icmpType(), _icmpType); + } + +} http://git-wip-us.apache.org/repos/asf/jclouds/blob/de2e5e01/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/FirewallApiLiveTest.java ---------------------------------------------------------------------- diff --git a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/FirewallApiLiveTest.java b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/FirewallApiLiveTest.java new file mode 100644 index 0000000..78e7dbd --- /dev/null +++ b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/FirewallApiLiveTest.java @@ -0,0 +1,146 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.profitbricks.features; + +import com.google.common.collect.Iterables; + +import java.util.List; + +import org.jclouds.profitbricks.BaseProfitBricksLiveTest; +import org.jclouds.profitbricks.domain.Firewall; +import org.jclouds.profitbricks.domain.Nic; + +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertFalse; +import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.assertTrue; + +import java.util.concurrent.TimeUnit; + +import org.jclouds.profitbricks.compute.internal.ProvisioningStatusAware; +import org.jclouds.profitbricks.compute.internal.ProvisioningStatusPollingPredicate; +import org.jclouds.profitbricks.domain.Firewall.Protocol; +import org.jclouds.profitbricks.domain.ProvisioningState; +import org.jclouds.util.Predicates2; +import org.testng.annotations.AfterClass; +import org.testng.annotations.Test; + +import com.google.common.base.Predicate; + +import autovalue.shaded.com.google.common.common.collect.ImmutableList; + +@Test(groups = "live", testName = "FirewallApiLiveTest", singleThreaded = true) +public class FirewallApiLiveTest extends BaseProfitBricksLiveTest { + + private Predicate<String> waitUntilAvailable; + private Nic nic; + + private Firewall createdFirewall; + private Firewall.Rule createdFirewallRule; + + @Override + protected void initialize() { + super.initialize(); + List<Nic> nics = api.nicApi().getAllNics(); + assertFalse(nics.isEmpty(), "Must atleast have 1 NIC available for firewall testing."); + + this.nic = Iterables.tryFind(nics, new Predicate<Nic>() { + + @Override + public boolean apply(Nic input) { + return input.state() == ProvisioningState.AVAILABLE; + } + }).orNull(); + + assertNotNull(nic, "No available NIC for firewall testing was found."); + + this.waitUntilAvailable = Predicates2.retry( + new ProvisioningStatusPollingPredicate(api, ProvisioningStatusAware.NIC, ProvisioningState.AVAILABLE), + 2l * 60l, 2l, TimeUnit.SECONDS); + } + + @Test + public void testAddFirewallRuleToNic() { + Firewall firewall = api.firewallApi().addFirewallRuleToNic( + Firewall.Request.ruleAddingBuilder() + .nicId(nic.id()) + .newRule() + .name("test-rule-tcp") + .protocol(Protocol.TCP) + .endRule() + .build()); + + assertNotNull(firewall); + assertNotNull(firewall.rules()); + + waitUntilAvailable.apply(nic.id()); + createdFirewall = firewall; + createdFirewallRule = Iterables.getOnlyElement(firewall.rules()); + } + + @Test(dependsOnMethods = "testAddFirewallRuleToNic") + public void testGetAllFirewalls() { + List<Firewall> firewalls = api.firewallApi().getAllFirewalls(); + + assertNotNull(firewalls); + assertFalse(firewalls.isEmpty()); + } + + @Test(dependsOnMethods = "testAddFirewallRuleToNic") + public void testGetFirewall() { + Firewall firewall = api.firewallApi().getFirewall(createdFirewall.id()); + + assertNotNull(firewall); + assertEquals(createdFirewall.id(), firewall.id()); + } + + @Test(dependsOnMethods = "testAddFirewallRuleToNic") + public void testActivateFirewall() { + boolean result = api.firewallApi().activateFirewall(ImmutableList.of(createdFirewall.id())); + + waitUntilAvailable.apply(nic.id()); + + assertTrue(result); + } + + @Test(dependsOnMethods = "testActivateFirewall") + void testDeactivateFirewall() { + boolean result = api.firewallApi().deactivateFirewall(ImmutableList.of(createdFirewall.id())); + + waitUntilAvailable.apply(nic.id()); + + assertTrue(result); + } + + @Test(dependsOnMethods = "testActivateFirewall") + void testRemoveFirewallRule() { + boolean result = api.firewallApi().removeFirewallRules(ImmutableList.of(createdFirewallRule.id())); + + waitUntilAvailable.apply(nic.id()); + + assertTrue(result); + } + + @AfterClass(alwaysRun = true) + public void testDeleteFirewall() { + if (createdFirewall != null) { + boolean result = api.firewallApi().deleteFirewall(ImmutableList.of(createdFirewall.id())); + + assertTrue(result, "Created firewall was not deleted."); + } + } +} http://git-wip-us.apache.org/repos/asf/jclouds/blob/de2e5e01/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/FirewallApiMockTest.java ---------------------------------------------------------------------- diff --git a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/FirewallApiMockTest.java b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/FirewallApiMockTest.java new file mode 100644 index 0000000..17ec324 --- /dev/null +++ b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/FirewallApiMockTest.java @@ -0,0 +1,324 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.profitbricks.features; + +import static org.jclouds.profitbricks.internal.BaseProfitBricksMockTest.mockWebServer; +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertFalse; +import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.assertNull; +import static org.testng.Assert.assertTrue; + +import com.squareup.okhttp.mockwebserver.MockResponse; +import com.squareup.okhttp.mockwebserver.MockWebServer; + +import java.util.List; + +import org.jclouds.profitbricks.ProfitBricksApi; +import org.jclouds.profitbricks.domain.Firewall; +import org.jclouds.profitbricks.domain.Firewall.Protocol; +import org.jclouds.profitbricks.internal.BaseProfitBricksMockTest; + +import org.testng.annotations.Test; + +import com.google.common.collect.ImmutableList; + +@Test(groups = "live", testName = "FirewallApiMockTest", singleThreaded = true) +public class FirewallApiMockTest extends BaseProfitBricksMockTest { + + @Test + public void testGetAllFirewalls() throws Exception { + MockWebServer server = mockWebServer(); + server.enqueue(new MockResponse().setBody(payloadFromResource("/firewall/firewalls.xml"))); + + ProfitBricksApi pbApi = api(server.getUrl(rootUrl)); + + FirewallApi api = pbApi.firewallApi(); + + try { + List<Firewall> firewalls = api.getAllFirewalls(); + assertRequestHasCommonProperties(server.takeRequest(), "<ws:getAllFirewalls/>"); + assertNotNull(firewalls); + assertEquals(firewalls.size(), 2); + } finally { + pbApi.close(); + server.shutdown(); + } + } + + @Test + public void testGetFirewall() throws Exception { + MockWebServer server = mockWebServer(); + server.enqueue(new MockResponse().setBody(payloadFromResource("/firewall/firewall.xml"))); + + ProfitBricksApi pbApi = api(server.getUrl(rootUrl)); + + FirewallApi api = pbApi.firewallApi(); + + String id = "firewall-id"; + String firewallruleid = "firewall-rule-id"; + + String content = "<ws:getFirewall><firewallId>" + id + "</firewallId></ws:getFirewall>"; + + try { + Firewall firewall = api.getFirewall(id); + assertRequestHasCommonProperties(server.takeRequest(), content); + assertNotNull(firewall); + assertEquals(firewall.id(), id); + assertFalse(firewall.rules().isEmpty()); + assertEquals(firewall.rules().get(0).id(), firewallruleid); + } finally { + pbApi.close(); + server.shutdown(); + } + } + + @Test + public void testGetNonExistingFirewall() throws Exception { + MockWebServer server = mockWebServer(); + server.enqueue(new MockResponse().setResponseCode(404)); + + ProfitBricksApi pbApi = api(server.getUrl(rootUrl)); + FirewallApi api = pbApi.firewallApi(); + + String id = "firewall-id"; + + try { + Firewall firewall = api.getFirewall(id); + assertRequestHasCommonProperties(server.takeRequest()); + assertNull(firewall); + } finally { + pbApi.close(); + server.shutdown(); + } + } + + @Test + public void testAddFirewallRuleToNic() throws Exception { + MockWebServer server = mockWebServer(); + server.enqueue(new MockResponse().setBody(payloadFromResource("/firewall/firewall-addtonic.xml"))); + + ProfitBricksApi pbApi = api(server.getUrl(rootUrl)); + FirewallApi api = pbApi.firewallApi(); + + String content = "<ws:addFirewallRulesToNic>" + + "<nicId>nic-id</nicId>" + + "<request>" + + "<name>name</name>" + + "<portRangeEnd>45678</portRangeEnd>" + + "<portRangeStart>12345</portRangeStart>" + + "<protocol>TCP</protocol>" + + "<sourceIp>192.168.0.1</sourceIp>" + + "<sourceMac>aa:bb:cc:dd:ee:ff</sourceMac>" + + "<targetIp>192.168.0.2</targetIp>" + + "</request>" + + "</ws:addFirewallRulesToNic>"; + try { + Firewall.Request.AddRulePayload payload = Firewall.Request.ruleAddingBuilder() + .nicId("nic-id") + .newRule() + .name("name") + .portRangeEnd(45678) + .portRangeStart(12345) + .protocol(Protocol.TCP) + .sourceIp("192.168.0.1") + .sourceMac("aa:bb:cc:dd:ee:ff") + .targetIp("192.168.0.2") + .endRule() + .build(); + Firewall response = api.addFirewallRuleToNic(payload); + + assertRequestHasCommonProperties(server.takeRequest(), content); + assertNotNull(response); + } finally { + pbApi.close(); + server.shutdown(); + } + } + + @Test + public void testRemoveFirewall() throws Exception { + MockWebServer server = mockWebServer(); + server.enqueue(new MockResponse().setBody(payloadFromResource("/firewall/firewall-remove.xml"))); + + ProfitBricksApi pbApi = api(server.getUrl(rootUrl)); + FirewallApi api = pbApi.firewallApi(); + + String firewallId = "12345"; + String content = "<ws:removeFirewallRules>" + + "<firewallRuleIds>" + firewallId + "</firewallRuleIds>" + + "</ws:removeFirewallRules>"; + + try { + boolean result = api.removeFirewallRules(ImmutableList.of(firewallId)); + assertRequestHasCommonProperties(server.takeRequest(), content); + assertTrue(result); + } finally { + pbApi.close(); + server.shutdown(); + } + } + + @Test + public void testRemoveNonExitingFirewall() throws Exception { + MockWebServer server = mockWebServer(); + server.enqueue(new MockResponse().setResponseCode(404)); + + ProfitBricksApi pbApi = api(server.getUrl(rootUrl)); + FirewallApi api = pbApi.firewallApi(); + + String firewallRuleId = "12345"; + + try { + boolean result = api.removeFirewallRules(ImmutableList.of(firewallRuleId)); + assertRequestHasCommonProperties(server.takeRequest()); + assertFalse(result); + } finally { + pbApi.close(); + server.shutdown(); + } + } + + @Test + public void testActivateFirewall() throws Exception { + MockWebServer server = mockWebServer(); + server.enqueue(new MockResponse().setBody(payloadFromResource("/firewall/firewall-activate.xml"))); + + ProfitBricksApi pbApi = api(server.getUrl(rootUrl)); + FirewallApi api = pbApi.firewallApi(); + + String firewallId = "12345"; + String content = "<ws:activateFirewalls>" + + "<firewallIds>" + firewallId + "</firewallIds>" + + "</ws:activateFirewalls>"; + + try { + boolean result = api.activateFirewall(ImmutableList.of(firewallId)); + assertRequestHasCommonProperties(server.takeRequest(), content); + assertTrue(result); + } finally { + pbApi.close(); + server.shutdown(); + } + } + + @Test + public void testActivateNonExitingFirewall() throws Exception { + MockWebServer server = mockWebServer(); + server.enqueue(new MockResponse().setResponseCode(404)); + + ProfitBricksApi pbApi = api(server.getUrl(rootUrl)); + FirewallApi api = pbApi.firewallApi(); + + String firewallId = "12345"; + + try { + boolean result = api.activateFirewall(ImmutableList.of(firewallId)); + assertRequestHasCommonProperties(server.takeRequest()); + assertFalse(result); + } finally { + pbApi.close(); + server.shutdown(); + } + } + + @Test + public void testDeactivateFirewall() throws Exception { + MockWebServer server = mockWebServer(); + server.enqueue(new MockResponse().setBody(payloadFromResource("/firewall/firewall-deactivate.xml"))); + + ProfitBricksApi pbApi = api(server.getUrl(rootUrl)); + FirewallApi api = pbApi.firewallApi(); + + String firewallId = "12345"; + String content = "<ws:deactivateFirewalls>" + + "<firewallIds>" + firewallId + "</firewallIds>" + + "</ws:deactivateFirewalls>"; + + try { + boolean result = api.deactivateFirewall(ImmutableList.of(firewallId)); + assertRequestHasCommonProperties(server.takeRequest(), content); + assertTrue(result); + } finally { + pbApi.close(); + server.shutdown(); + } + } + + @Test + public void testDeactivateNonExitingFirewall() throws Exception { + MockWebServer server = mockWebServer(); + server.enqueue(new MockResponse().setResponseCode(404)); + + ProfitBricksApi pbApi = api(server.getUrl(rootUrl)); + FirewallApi api = pbApi.firewallApi(); + + String firewallId = "12345"; + + try { + boolean result = api.deactivateFirewall(ImmutableList.of(firewallId)); + assertRequestHasCommonProperties(server.takeRequest()); + assertFalse(result); + } finally { + pbApi.close(); + server.shutdown(); + } + } + + @Test + public void testDeleteFirewall() throws Exception { + MockWebServer server = mockWebServer(); + server.enqueue(new MockResponse().setBody(payloadFromResource("/firewall/firewall-delete.xml"))); + + ProfitBricksApi pbApi = api(server.getUrl(rootUrl)); + FirewallApi api = pbApi.firewallApi(); + + String firewallId = "12345"; + String content = "<ws:deleteFirewalls>" + + "<firewallIds>" + firewallId + "</firewallIds>" + + "</ws:deleteFirewalls>"; + + try { + boolean result = api.deleteFirewall(ImmutableList.of(firewallId)); + assertRequestHasCommonProperties(server.takeRequest(), content); + assertTrue(result); + } finally { + pbApi.close(); + server.shutdown(); + } + } + + @Test + public void testDeleteNonExitingFirewall() throws Exception { + MockWebServer server = mockWebServer(); + server.enqueue(new MockResponse().setResponseCode(404)); + + ProfitBricksApi pbApi = api(server.getUrl(rootUrl)); + FirewallApi api = pbApi.firewallApi(); + + String firewallId = "12345"; + + try { + boolean result = api.deleteFirewall(ImmutableList.of(firewallId)); + assertRequestHasCommonProperties(server.takeRequest()); + assertFalse(result); + } finally { + pbApi.close(); + server.shutdown(); + } + } +} http://git-wip-us.apache.org/repos/asf/jclouds/blob/de2e5e01/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/NicApiLiveTest.java ---------------------------------------------------------------------- diff --git a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/NicApiLiveTest.java b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/NicApiLiveTest.java new file mode 100644 index 0000000..fbbef8b --- /dev/null +++ b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/NicApiLiveTest.java @@ -0,0 +1,136 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.profitbricks.features; + +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertFalse; +import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.assertTrue; + +import com.google.common.collect.Iterables; + +import java.util.List; +import java.util.concurrent.TimeUnit; + +import org.jclouds.profitbricks.BaseProfitBricksLiveTest; +import org.jclouds.profitbricks.compute.internal.ProvisioningStatusAware; +import org.jclouds.profitbricks.compute.internal.ProvisioningStatusPollingPredicate; +import org.jclouds.profitbricks.domain.Nic; +import org.jclouds.profitbricks.domain.ProvisioningState; +import org.jclouds.profitbricks.domain.Server; +import org.jclouds.util.Predicates2; + +import org.testng.annotations.AfterClass; +import org.testng.annotations.Test; + +import com.google.common.base.Predicate; + +@Test(groups = "live", testName = "NicApiLiveTest", singleThreaded = true) +public class NicApiLiveTest extends BaseProfitBricksLiveTest { + + private Predicate<String> waitUntilAvailable; + private Server server; + private Nic createdNic; + + @Override + protected void initialize() { + super.initialize(); + List<Server> servers = api.serverApi().getAllServers(); + assertFalse(servers.isEmpty(), "Must atleast have 1 server available for NIC testing."); + + this.server = Iterables.tryFind(servers, new Predicate<Server>() { + + @Override + public boolean apply(Server input) { + return input.state() == ProvisioningState.AVAILABLE; + } + }).orNull(); + + this.waitUntilAvailable = Predicates2.retry( + new ProvisioningStatusPollingPredicate(api, ProvisioningStatusAware.NIC, ProvisioningState.AVAILABLE), + 2l * 60l, 2l, TimeUnit.SECONDS); + } + + @Test + public void testCreateNic() { + Nic.Request.CreatePayload payload = Nic.Request.creatingBuilder() + .name("name nr1") + .dhcpActive(true) + .serverId(server.id()) + .lanId(1) + .build(); + + Nic nic = api.nicApi().createNic(payload); + assertNotNull(nic); + + waitUntilAvailable.apply(nic.id()); + this.createdNic = nic; + } + + @Test(dependsOnMethods = "testCreateNic") + public void testGetAllNics() { + List<Nic> nics = api.nicApi().getAllNics(); + + assertNotNull(nics); + } + + @Test(dependsOnMethods = "testCreateNic") + public void testGetNic() { + Nic nic = api.nicApi().getNic(createdNic.id()); + + assertNotNull(nic); + assertEquals(nic.id(), createdNic.id()); + } + + @Test(dependsOnMethods = "testCreateNic") + public void testUpdateNic() { + Nic.Request.UpdatePayload payload = Nic.Request.updatingBuilder() + .name("name nr2") + .id(createdNic.id()) + .build(); + + Nic updatedNic = api.nicApi().updateNic(payload); + assertNotNull(updatedNic); + waitUntilAvailable.apply(payload.id()); + + updatedNic = api.nicApi().getNic(payload.id()); + + assertEquals(updatedNic.name(), payload.name()); + } + + @Test(dependsOnMethods = "testUpdateNic") + public void testSetInternetAccess() { + + Nic.Request.SetInternetAccessPayload payload = Nic.Request.setInternetAccessBuilder() + .dataCenterId(createdNic.dataCenterId()) + .lanId(1) + .internetAccess(true) + .build(); + + Nic result = api.nicApi().setInternetAccess(payload); + assertNotNull(result); + } + + @AfterClass(alwaysRun = true) + public void testDeleteNic() { + if (createdNic != null) { + boolean result = api.nicApi().deleteNic(createdNic.id()); + + assertTrue(result, "Created test NIC was not deleted."); + } + } +} http://git-wip-us.apache.org/repos/asf/jclouds/blob/de2e5e01/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/NicApiMockTest.java ---------------------------------------------------------------------- diff --git a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/NicApiMockTest.java b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/NicApiMockTest.java new file mode 100644 index 0000000..0e01e2c --- /dev/null +++ b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/NicApiMockTest.java @@ -0,0 +1,222 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.profitbricks.features; + +import com.squareup.okhttp.mockwebserver.MockResponse; +import com.squareup.okhttp.mockwebserver.MockWebServer; +import java.util.List; +import org.jclouds.profitbricks.ProfitBricksApi; +import org.jclouds.profitbricks.domain.Nic; +import org.jclouds.profitbricks.internal.BaseProfitBricksMockTest; +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertFalse; +import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.assertNull; +import static org.testng.Assert.assertTrue; +import org.testng.annotations.Test; + +@Test(groups = "unit", testName = "NicApiMockTest") + +public class NicApiMockTest extends BaseProfitBricksMockTest { + + @Test + public void testGetNic() throws Exception { + MockWebServer server = mockWebServer(); + server.enqueue(new MockResponse().setBody(payloadFromResource("/nic/nic.xml"))); + + ProfitBricksApi pbApi = api(server.getUrl(rootUrl)); + NicApi api = pbApi.nicApi(); + + String id = "12345678-abcd-efgh-ijkl-987654321000"; + + String content = "<ws:getNic><nicId>" + id + "</nicId></ws:getNic>"; + try { + Nic nic = api.getNic(id); + assertRequestHasCommonProperties(server.takeRequest(), content); + assertNotNull(nic); + assertEquals(nic.id(), id); + } finally { + pbApi.close(); + server.shutdown(); + } + } + + @Test + public void testGetNonExistingNic() throws Exception { + MockWebServer server = mockWebServer(); + server.enqueue(new MockResponse().setResponseCode(404)); + + ProfitBricksApi pbApi = api(server.getUrl(rootUrl)); + NicApi api = pbApi.nicApi(); + + String id = "nonexisting-nic-id"; + + try { + Nic nic = api.getNic(id); + assertRequestHasCommonProperties(server.takeRequest()); + assertNull(nic); + } finally { + pbApi.close(); + server.shutdown(); + } + } + + @Test + public void testGetAllNic() throws Exception { + MockWebServer server = mockWebServer(); + server.enqueue(new MockResponse().setBody(payloadFromResource("/nic/nics.xml"))); + + ProfitBricksApi pbApi = api(server.getUrl(rootUrl)); + NicApi api = pbApi.nicApi(); + try { + List<Nic> nics = api.getAllNics(); + assertRequestHasCommonProperties(server.takeRequest(), "<ws:getAllNic/>"); + assertNotNull(nics); + } finally { + pbApi.close(); + server.shutdown(); + } + } + + @Test + public void testCreateNic() throws Exception { + MockWebServer server = mockWebServer(); + server.enqueue(new MockResponse().setBody(payloadFromResource("/nic/nic-create.xml"))); + + ProfitBricksApi pbApi = api(server.getUrl(rootUrl)); + NicApi api = pbApi.nicApi(); + + String content = "<ws:createNic>" + + "<request>" + + "<ip>192.168.0.1</ip>" + + "<nicName>nic-name</nicName>" + + "<dhcpActive>true</dhcpActive>" + + "<serverId>server-id</serverId>" + + "<lanId>1</lanId>" + + "</request>" + + "</ws:createNic>"; + + try { + Nic nic = api.createNic( + Nic.Request.creatingBuilder() + .ip("192.168.0.1") + .name("nic-name") + .dhcpActive(true) + .lanId(1) + .serverId("server-id") + .build()); + + assertRequestHasCommonProperties(server.takeRequest(), content); + assertNotNull(nic.id()); + + } finally { + pbApi.close(); + server.shutdown(); + } + } + + @Test + public void testUpdateNic() throws Exception { + MockWebServer server = mockWebServer(); + server.enqueue(new MockResponse().setBody(payloadFromResource("/nic/nic-update.xml"))); + + ProfitBricksApi pbApi = api(server.getUrl(rootUrl)); + NicApi api = pbApi.nicApi(); + + String content = "<ws:updateNic>" + + "<request>" + + "<nicId>nic-id</nicId>" + + "<ip>ip</ip>" + + "<nicName>nic-name</nicName>" + + "<dhcpActive>true</dhcpActive>" + + "<lanId>1</lanId>" + + "</request>" + + "</ws:updateNic>"; + try { + Nic nic = api.updateNic(Nic.Request.UpdatePayload.create("nic-id", "ip", "nic-name", true, 1)); + assertRequestHasCommonProperties(server.takeRequest(), content); + } finally { + pbApi.close(); + server.shutdown(); + } + } + + @Test + public void testSetInternetAccess() throws Exception { + MockWebServer server = mockWebServer(); + server.enqueue(new MockResponse().setBody(payloadFromResource("/nic/nic-internetaccess.xml"))); + + ProfitBricksApi pbApi = api(server.getUrl(rootUrl)); + NicApi api = pbApi.nicApi(); + + String content = "<ws:setInternetAccess>" + + "<dataCenterId>datacenter-id</dataCenterId>" + + "<lanId>1</lanId>" + + "<internetAccess>true</internetAccess>" + + "</ws:setInternetAccess>"; + try { + Nic nic = api.setInternetAccess(Nic.Request.SetInternetAccessPayload.create("datacenter-id", 1, true)); + assertRequestHasCommonProperties(server.takeRequest(), content); + } finally { + pbApi.close(); + server.shutdown(); + } + } + + @Test + public void testDeleteNic() throws Exception { + MockWebServer server = mockWebServer(); + server.enqueue(new MockResponse().setBody(payloadFromResource("/nic/nic-delete.xml"))); + + ProfitBricksApi pbApi = api(server.getUrl(rootUrl)); + NicApi api = pbApi.nicApi(); + + String id = "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"; + + String content = "<ws:deleteNic><nicId>" + id + "</nicId></ws:deleteNic>"; + + try { + boolean result = api.deleteNic(id); + assertRequestHasCommonProperties(server.takeRequest(), content); + assertTrue(result); + } finally { + pbApi.close(); + server.shutdown(); + } + } + + @Test + public void testDeleteNonExistingNic() throws Exception { + MockWebServer server = mockWebServer(); + server.enqueue(new MockResponse().setResponseCode(404)); + + ProfitBricksApi pbApi = api(server.getUrl(rootUrl)); + NicApi api = pbApi.nicApi(); + + String id = "nonexisting-nic-id"; + + try { + boolean result = api.deleteNic(id); + assertRequestHasCommonProperties(server.takeRequest()); + assertFalse(result); + } finally { + pbApi.close(); + server.shutdown(); + } + } + +} http://git-wip-us.apache.org/repos/asf/jclouds/blob/de2e5e01/providers/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/datacenter/DataCenterInfoResponseHandlerTest.java ---------------------------------------------------------------------- diff --git a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/datacenter/DataCenterInfoResponseHandlerTest.java b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/datacenter/DataCenterInfoResponseHandlerTest.java index f9827b3..e2ee87e 100644 --- a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/datacenter/DataCenterInfoResponseHandlerTest.java +++ b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/datacenter/DataCenterInfoResponseHandlerTest.java @@ -24,7 +24,9 @@ import org.jclouds.date.DateCodecFactory; import org.jclouds.http.functions.ParseSax; import org.jclouds.profitbricks.domain.AvailabilityZone; import org.jclouds.profitbricks.domain.DataCenter; +import org.jclouds.profitbricks.domain.Firewall; import org.jclouds.profitbricks.domain.Location; +import org.jclouds.profitbricks.domain.Nic; import org.jclouds.profitbricks.domain.OsType; import org.jclouds.profitbricks.domain.ProvisioningState; import org.jclouds.profitbricks.domain.Server; @@ -63,7 +65,7 @@ public class DataCenterInfoResponseHandlerTest extends BaseResponseHandlerTest<D .location(Location.US_LAS) .servers(ImmutableList.<Server>of( Server.builder() - .id("12345678-abcd-efgh-ijkl-987654321000") + .id("qqqqqqqq-wwww-eeee-rrrr-tttttttttttt") .name("jnode1") .cores(4) .ram(4096) @@ -80,8 +82,43 @@ public class DataCenterInfoResponseHandlerTest extends BaseResponseHandlerTest<D .isNicHotUnPlug(true) .isDiscVirtioHotPlug(true) .isDiscVirtioHotUnPlug(true) + .storages(ImmutableList.<Storage>of( + Storage.builder() + .bootDevice(Boolean.TRUE) + .id("ssssssss-aaaa-ffff-gggg-hhhhhhhhhhhh") + .busType(Storage.BusType.VIRTIO) + .deviceNumber(1) + .size(40f) + .name("jnode1-disk1") + .build() + ) + ) + .nics(ImmutableList.<Nic>of( + Nic.builder() + .dataCenterId("12345678-abcd-efgh-ijkl-987654321000") + .id("zzzzzzzz-xxxx-cccc-vvvv-bbbbbbbbbbbb") + .lanId(1) + .internetAccess(true) + .serverId("qqqqqqqq-wwww-eeee-rrrr-tttttttttttt") + .ip("202.94.38.12") + .macAddress("02:01:09:cd:f0:b0") + .firewall( + Firewall.builder() + .active(false) + .id("llllllll-kkkk-jjjj-hhhh-gggggggggggg") + .nicId("zzzzzzzz-xxxx-cccc-vvvv-bbbbbbbbbbbb") + .state(ProvisioningState.AVAILABLE) + .build() + ) + .dhcpActive(true) + .gatewayIp("202.94.38.1") + .state(ProvisioningState.AVAILABLE) + .build() + ) + ) .build() - )) + ) + ) .storages(ImmutableList.<Storage>of( Storage.builder() .id("ssssssss-aaaa-ffff-gggg-hhhhhhhhhhhh") @@ -90,6 +127,9 @@ public class DataCenterInfoResponseHandlerTest extends BaseResponseHandlerTest<D .state(ProvisioningState.AVAILABLE) .creationTime(dateParser.toDate("2014-12-04T07:09:23.138Z")) .lastModificationTime(dateParser.toDate("2014-12-12T03:14:48.316Z")) + .serverIds(ImmutableList.of( + "qqqqqqqq-wwww-eeee-rrrr-tttttttttttt" + )) .build() )) .build();
