Update docker file to run UTs to produce cpputest logs
[ric-plt/dbaas.git] / docker / Dockerfile.redis
index 8d02fe3..e3969dd 100644 (file)
 #   See the License for the specific language governing permissions and
 #   limitations under the License.
 
-FROM ubuntu:latest
+#
+#   This source code is part of the near-RT RIC (RAN Intelligent Controller)
+#   platform project (RICP).
+#
+
+
+# Alpine-linux based containers use musl implementation of libc which causes
+# valgrind to emit false positives. Therefore we run UT with valgrind in
+# a separate build stage that uses ubuntu container with GNU libc installed.
+#
+# NOTE: The valgrind false positive problem could also potentially be solved
+# with valgrind suppression files but that kind of approach may be fragile.
+FROM ubuntu:19.10 as cpputest-build
+
+RUN apt update && \
+    apt install -y \
+    automake \
+    autoconf \
+    cmake \
+    curl \
+    g++ \
+    gcc \
+    libtool \
+    make \
+    pkg-config \
+    valgrind \
+    lcov
+
+# Cpputest built-in memory checks generate false positives in valgrind.
+# This is solved by compiling cpputest with memory checking disabled.
+WORKDIR /cpputest
+RUN curl -L https://github.com/cpputest/cpputest/releases/download/v3.8/cpputest-3.8.tar.gz | \
+    tar --strip-components=1 -xzf -
+WORKDIR /cpputest/builddir
+RUN cmake -DMEMORY_LEAK_DETECTION=OFF .. && \
+    make install
+
+COPY ./redismodule /redismodule
+WORKDIR /redismodule
+RUN ./autogen.sh && \
+    ./configure && \
+    make test
+
+RUN ./autogen.sh && \
+    ./configure --disable-unit-test-memcheck && \
+    make test && \
+    make install
+
+FROM nexus3.o-ran-sc.org:10004/o-ran-sc/bldr-alpine3:12-a3.11 as build-env
 
-# Install redis
-RUN apt-get update && \
-    apt install -y redis-server && \
-    apt-get clean
+RUN apk add cpputest
+COPY ./redismodule /redismodule
+WORKDIR /redismodule
+RUN ./autogen.sh && \
+    ./configure --disable-unit-test-memcheck && \
+    make test && \
+    make install
 
-# Create suitable configuration file
-RUN sed -i 's/^\(bind .*\)$/# \1/' /etc/redis/redis.conf && \
-    sed -i 's/^\(daemonize .*\)$/# \1/' /etc/redis/redis.conf && \
-    sed 's/^protected-mode yes/protected-mode no/' -i /etc/redis/redis.conf && \
-    sed -i 's/^\(save .*\)$/# \1/' /etc/redis/redis.conf && \
-    echo 'save ""' >> /etc/redis/redis.conf
 
-EXPOSE 6379
+FROM redis:5.0.5-alpine3.9 as build
 
-CMD ["redis-server", "/etc/redis/redis.conf"]
+RUN apk add curl
+COPY --from=build-env /usr/local/libexec/redismodule/libredismodule.so /usr/local/libexec/redismodule/libredismodule.so
+WORKDIR /data