Camera: Add unit test infrastructure for libcameraclient

Change-Id: I957538663ae8332d26f3640c63a75efc79f4ac5c
diff --git a/camera/Android.mk b/camera/Android.mk
index b66105b..a17ad1a 100644
--- a/camera/Android.mk
+++ b/camera/Android.mk
@@ -1,6 +1,9 @@
-LOCAL_PATH:= $(call my-dir)
+CAMERA_CLIENT_LOCAL_PATH:= $(call my-dir)
+include $(call all-subdir-makefiles)
 include $(CLEAR_VARS)
 
+LOCAL_PATH := $(CAMERA_CLIENT_LOCAL_PATH)
+
 LOCAL_SRC_FILES:= \
 	Camera.cpp \
 	CameraMetadata.cpp \
@@ -21,7 +24,7 @@
 	libcamera_metadata \
 
 LOCAL_C_INCLUDES += \
-    system/media/camera/include
+	system/media/camera/include \
 
 LOCAL_MODULE:= libcamera_client
 
diff --git a/camera/tests/Android.mk b/camera/tests/Android.mk
new file mode 100644
index 0000000..586e814
--- /dev/null
+++ b/camera/tests/Android.mk
@@ -0,0 +1,36 @@
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES:= \
+	main.cpp \
+
+LOCAL_SHARED_LIBRARIES := \
+	libutils \
+	libcutils \
+	libstlport \
+	libcamera_metadata \
+	libcamera_client \
+	libgui \
+	libsync \
+	libui \
+	libdl
+
+LOCAL_STATIC_LIBRARIES := \
+	libgtest
+
+LOCAL_C_INCLUDES += \
+	bionic \
+	bionic/libstdc++/include \
+	external/gtest/include \
+	external/stlport/stlport \
+	system/media/camera/include \
+	frameworks/av/services/camera/libcameraservice \
+	frameworks/av/include/camera \
+	frameworks/native/include \
+
+LOCAL_CFLAGS += -Wall -Wextra
+
+LOCAL_MODULE:= camera_client_test
+LOCAL_MODULE_TAGS := tests
+
+include $(BUILD_EXECUTABLE)
diff --git a/camera/tests/main.cpp b/camera/tests/main.cpp
new file mode 100644
index 0000000..8c8c515
--- /dev/null
+++ b/camera/tests/main.cpp
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * 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.
+ */
+
+#include <gtest/gtest.h>
+
+
+int main(int argc, char **argv) {
+
+    ::testing::InitGoogleTest(&argc, argv);
+
+    int ret = RUN_ALL_TESTS();
+
+    return ret;
+}
diff --git a/include/camera/Camera.h b/include/camera/Camera.h
index 43dae1c..8b87de6 100644
--- a/include/camera/Camera.h
+++ b/include/camera/Camera.h
@@ -159,7 +159,7 @@
         sp<Camera>         mCamera;
     };
 
-private:
+protected:
                         Camera();
                         Camera(const Camera&);
                         Camera& operator=(const Camera);
diff --git a/services/camera/libcameraservice/CameraService.cpp b/services/camera/libcameraservice/CameraService.cpp
index 31e20c5..b1c594a 100644
--- a/services/camera/libcameraservice/CameraService.cpp
+++ b/services/camera/libcameraservice/CameraService.cpp
@@ -166,6 +166,7 @@
                      callingPid);
                 return client;
             } else {
+                // TODOSC: need to support 1 regular client, multiple shared clients here
                 ALOGW("CameraService::connect X (pid %d) rejected (existing client).",
                       callingPid);
                 return NULL;