Commit 5587582b authored by Miguel Angel Reina Ortega's avatar Miguel Angel Reina Ortega
Browse files

Creation of docker image

parent daf6f451
Loading
Loading
Loading
Loading

.gitlab-ci.yml

0 → 100644
+17 −0
Original line number Diff line number Diff line
# CI/CD:
#
# BUILD triggered by:
#  - any (branch commit)
#  
#   

stages:
  - build
    
Build api-tests docker image:
  stage: build
  before_script: cd api-tests
  script: docker build --tag stf583-rf-validation:miguel -f Dockerfile .
  rules:
    - changes:
        - api-tests/Dockerfile
 No newline at end of file

api-tests/Dockerfile

0 → 100644
+60 −0
Original line number Diff line number Diff line
FROM ubuntu:18.04

MAINTAINER ETSI STF 583

LABEL description="SFT583 Robot Framework Docker Image"

ENV TERM=xterm
ENV HOSTNAME docker-robot-STF583

ARG ssh_prv_key

RUN DEBIAN_FRONTEND=noninteractive apt update \
	&& apt install python3 git -y \
	&& apt install python3-pip -y \
    && DEBIAN_FRONTEND=noninteractive apt-get autoremove --purge -y \
    && DEBIAN_FRONTEND=noninteractive apt-get autoclean \
    && rm -rf /var/lib/apt/lists/*

RUN echo "docker-robot-STF583" > /etc/hostname \
    && echo "root:etsi" | chpasswd

RUN useradd --create-home --shell /bin/bash --user-group etsi --groups sudo \
    && echo "etsi:etsi" | chpasswd \
    && adduser etsi sudo \
    && echo "etsi ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers

RUN DEBIAN_FRONTEND=noninteractive \
        && mkdir -p /home/etsi/dev/robot \
        && cd /home/etsi/dev/robot 

#RUN pip3 install robotframework

ADD requirements.txt /home/etsi/dev/robot/
ADD extensions /home/etsi/dev/robot/extensions

RUN ls /home/etsi/dev/robot

#To avoid to use the cache when new commits are available
ADD "https://forge.etsi.org/rep/api/v4/projects/224/repository/branches/master" /tmp/devalidateCache

RUN DEBIAN_FRONTED=noninteractive \
	cd /home/etsi/dev/ \
	mkdir -p build \
	&& git clone https://forge.etsi.org/rep/forge-tools/robot2doc.git \
	&& cd robot2doc \
	&& pip3 install -r requirements.txt \
	&& python3 -m pip install -e .

RUN DEBIAN_FRONTEND=noninteractive \
	&& cd /home/etsi/dev/robot \
	&& pip3 install -r requirements.txt


#ADD . /home/etsi/dev/robot

RUN	chmod +x /home/etsi/dev/robot/scripts/*

CMD tail -f /dev/null

+75 −0
Original line number Diff line number Diff line
diff --git a/src/MockServerLibrary/library.py b/src/MockServerLibrary/library.py
index a9e6227..7208e61 100644
--- a/src/MockServerLibrary/library.py
+++ b/src/MockServerLibrary/library.py
@@ -68,6 +68,31 @@ class MockServerLibrary(object):
 
         return req
 
+    def create_mock_request_matcher_schema(self, method, path, body_type='JSON_SCHEMA', body=None):
+        """Creates a mock request matcher to be used by mockserver.
+
+        Returns the request matcher in a dictionary format.
+
+        `method` is the HTTP method of the mocked endpoint
+
+        `path` is the url of the mocked endpoint, e.g. /api
+
+        `body_type` is the type of the request body, e.g. JSON
+
+        `body` is a dictionary of the json attribute(s) to match
+
+        `exact` is a boolean value which specifies whether the body should match fully (=true),
+        or if only specified fields should match (=false)
+        """
+        req = {}
+        req['method'] = method
+        req['path'] = path
+
+        req['body'] = {'type': body_type, 'jsonSchema': json.dumps(body)}
+
+        return req	
+		
+		
     def create_mock_response(self, status_code, headers=None, body_type='JSON', body=None):
         """Creates a mock response to be used by mockserver.
 
@@ -97,6 +122,37 @@ class MockServerLibrary(object):
 
         return rsp
 
+		
+    def create_mock_response_schema(self, status_code, headers=None, body_type='JSON_SCHEMA', body=None):
+        """Creates a mock response to be used by mockserver.
+
+        Returns the response in a dictionary format.
+
+        `status_code` is the HTTP status code of the response
+
+        `headers` is a dictionary of headers to be added to the response
+
+        `body_type` is the type of the response body, e.g. JSON
+
+        `body` is a dictonary of JSON attribute(s) to be added to the response body
+        """
+        rsp = {}
+        rsp['statusCode'] = int(status_code)
+
+        if headers:
+            rsp['headers'] = []
+
+            for key, value in headers.items():
+                header = {'name': key, 'values': value.split(",")}
+                rsp['headers'].append(header)
+                logger.debug("Add header - header: {}".format(header))
+
+        if body_type is 'JSON_SCHEMA' and body:
+            rsp['body'] = json.dumps(body)
+
+        return rsp
+
+
     def create_mock_expectation(self, request, response, count=1, unlimited=True):
         """Creates a mock expectation to be used by mockserver.
 
+59 −0
Original line number Diff line number Diff line
diff --git a/JSONLibrary/JSONLibraryKeywords.py b/JSONLibrary/JSONLibraryKeywords.py
index 6ceb6e1..20bfd45 100644
--- a/JSONLibrary/JSONLibraryKeywords.py
+++ b/JSONLibrary/JSONLibraryKeywords.py
@@ -1,7 +1,13 @@
 # -*- coding: utf-8 -*-
 from robot.api import logger
 from robot.api.deco import keyword
-from version import VERSION
+#from version import VERSION
+try:
+    from version import VERSION
+except:
+    from JSONLibrary.version import VERSION
+
+
 import os.path
 import json
 from jsonpath_rw import Index, Fields
diff --git a/JSONLibrary/__init__.py b/JSONLibrary/__init__.py
index efc756e..79ad728 100644
--- a/JSONLibrary/__init__.py
+++ b/JSONLibrary/__init__.py
@@ -1,6 +1,12 @@
 # -*- coding: utf-8 -*-
-from JSONLibraryKeywords import JSONLibraryKeywords
-from version import VERSION
+# from JSONLibraryKeywords import JSONLibraryKeywords
+# from version import VERSION
+try:
+    from JSONLibraryKeywords import JSONLibraryKeywords
+    from version import VERSION
+except:
+    from JSONLibrary.JSONLibraryKeywords import JSONLibraryKeywords
+    from JSONLibrary.version import VERSION
 
 __author__ = 'Traitanit Huangsri'
 __email__ = 'traitanit.hua@gmail.com'
diff --git a/setup.py b/setup.py
index 744e6f5..5082364 100644
--- a/setup.py
+++ b/setup.py
@@ -2,7 +2,15 @@
 # -*- coding: utf-8 -*-
 
 from setuptools import setup
-from JSONLibrary.version import VERSION
+# from JSONLibrary.version import VERSION
+
+
+# importing this has the unwanted side-effect of importing
+# other required packages that may not be installed yet
+# resulting in an error
+#from JSONLibrary.version import VERSION
+
+VERSION = '0.2'
 
 requirements = [
     'tox',
+59 −0
Original line number Diff line number Diff line
diff --git a/src/MockServerLibrary/library.py b/src/MockServerLibrary/library.py
index a9e6227..7ba1eed 100644
--- a/src/MockServerLibrary/library.py
+++ b/src/MockServerLibrary/library.py
@@ -66,6 +66,9 @@ class MockServerLibrary(object):
             match_type = 'STRICT' if exact else 'ONLY_MATCHING_FIELDS'
             req['body'] = {'type': body_type, 'json': json.dumps(body), 'matchType': match_type}

+        if body_type is 'JSON_SCHEMA' and body:
+            req['body'] = {'type': body_type, 'json': json.dumps(body)}
+
         return req

     def create_mock_response(self, status_code, headers=None, body_type='JSON', body=None):
@@ -97,6 +100,42 @@ class MockServerLibrary(object):

         return rsp

+    def create_mock_http_forward(self, path, delay=1, unit='SECONDS'):
+        """Creates a mock http override forward to be used by mockserver.
+
+        Returns the http forward in a dictionary format.
+
+        `path` is the new url where to forward the request
+
+        `delay` is the delay of the forward action
+
+        `unit` is the unit of the delay time (default "SECONDS")
+        """
+        fwd = {}
+        fwd['httpRequest'] = {'path': path}
+        fwd['delay'] = {'timeUnit': unit, 'value': delay}
+
+        return fwd
+
+    def create_mock_expectation_with_http_forward(self, request, forward, count=1, unlimited=True):
+        """Creates a mock expectation with request and forward action to be used by mockserver.
+
+        `request` is a mock request matcher in a dictionary format.
+
+        `forward` is a mock forward in a dictionary format.
+
+        `count` is the number of expected requests
+
+        `unlimited` is a boolean value which, if enabled, allows unspecified number of
+        requests to reply to
+        """
+        data = {}
+        data['httpRequest'] = request
+        data['httpOverrideForwardedRequest'] = forward
+        data['times'] = {'remainingTimes': int(count), 'unlimited': unlimited}
+
+        self.create_mock_expectation_with_data(data)
+
     def create_mock_expectation(self, request, response, count=1, unlimited=True):
         """Creates a mock expectation to be used by mockserver.


Loading