diff --git a/chef/core/src/main/java/org/jclouds/chef/util/ChefUtils.java b/chef/core/src/main/java/org/jclouds/chef/util/ChefUtils.java new file mode 100644 index 0000000000..621e43f3dc --- /dev/null +++ b/chef/core/src/main/java/org/jclouds/chef/util/ChefUtils.java @@ -0,0 +1,78 @@ +/** + * + * Copyright (C) 2010 Cloud Conscious, LLC. + * + * ==================================================================== + * Licensed 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.chef.util; + +import static com.google.common.base.Preconditions.checkNotNull; + +import java.util.Date; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.jclouds.domain.JsonBall; +import org.jclouds.ohai.Automatic; +import org.jclouds.ohai.config.multibindings.MapBinder; + +import com.google.common.base.Predicate; +import com.google.common.base.Supplier; +import com.google.common.collect.Iterables; +import com.google.inject.Binder; +import com.google.inject.TypeLiteral; + +/** + * + * + * @author Adrian Cole + */ +public class ChefUtils { + + public static Date fromOhaiTime(JsonBall ohaiDate) { + return new Date(Long.parseLong(checkNotNull(ohaiDate, "ohaiDate").toString().replaceAll("\\.[0-9]*$", ""))); + } + + public static JsonBall toOhaiTime(long millis) { + return new JsonBall(millis + ""); + } + + public static MapBinder> ohaiAutomaticAttributeBinder(Binder binder) { + MapBinder> mapbinder = MapBinder.newMapBinder(binder, new TypeLiteral() { + }, new TypeLiteral>() { + }, Automatic.class); + return mapbinder; + } + + /** + * + * @return NoSuchElementException if no element in the runList is a role. + */ + public static String findRoleInRunList(List runList) { + final Pattern pattern = Pattern.compile("^role\\[(.*)\\]$"); + String roleToParse = Iterables.find(runList, new Predicate() { + + @Override + public boolean apply(String input) { + return pattern.matcher(input).matches(); + } + + }); + Matcher matcher = pattern.matcher(roleToParse); + matcher.find(); + return matcher.group(1); + } +} \ No newline at end of file diff --git a/chef/core/src/test/java/org/jclouds/chef/util/ChefUtilsTest.java b/chef/core/src/test/java/org/jclouds/chef/util/ChefUtilsTest.java new file mode 100644 index 0000000000..fdf1e0c63b --- /dev/null +++ b/chef/core/src/test/java/org/jclouds/chef/util/ChefUtilsTest.java @@ -0,0 +1,66 @@ +/** + * + * Copyright (C) 2010 Cloud Conscious, LLC. + * + * ==================================================================== + * 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.chef.util; + +import static org.testng.Assert.assertEquals; + +import java.util.Date; +import java.util.NoSuchElementException; + +import org.jclouds.domain.JsonBall; +import org.testng.annotations.Test; + +import com.google.common.collect.ImmutableList; + +/** + * Tests behavior of {@code ChefUtils} + * + * @author Adrian Cole + */ +@Test(groups = "unit", sequential = true, testName = "ohai.ChefUtilsTest") +public class ChefUtilsTest { + public static long millis = 1280251180727l; + public static String millisString = "1280251180727"; + public static Date now = new Date(1280251180727l); + + public void testToOhaiTime() { + assertEquals(ChefUtils.toOhaiTime(millis).toString(), millisString); + } + + public void testFromOhaiTime() { + assertEquals(ChefUtils.fromOhaiTime(new JsonBall(millisString)), now); + + } + + @Test(expectedExceptions = NoSuchElementException.class) + public void testFindRoleInRunListThrowsNoSuchElementOnRecipe() { + ChefUtils.findRoleInRunList(ImmutableList.of("recipe[java]")); + } + + public void testFindRoleInRunList() { + assertEquals(ChefUtils.findRoleInRunList(ImmutableList.of("role[prod]")), "prod"); + + } + +}