Exemple #1
0
def run():
    """
    create a CSEBase
    """
    resource = ResourcesFactory().create(ResourceType.CSEBase.value)
    resource.set_csi(settings.GHOSTM2M['CSE-ID'])

    base = DBConnection().db[settings.GHOSTM2M['CSE-ID']]
    result = base.find_one({
        'ty': ResourceType.CSEBase.value,
        'csi': settings.GHOSTM2M['CSE-ID']
    })
    if result is None:
        ri = CSEBaseMapper().store(settings.GHOSTM2M['CSE-ID'], resource)
        print('Creado CSEBase. ', ri)
    else:
        print('CSEBase ya existe. ', result)
Exemple #2
0
 def valid(self):
     result = DBConnection().db['users'].find_one({'_id': self._username})
     if result is None:
         return False
     elif self._pwd == result['pwd']:
         return True
     else:
         return False
Exemple #3
0
    def test_api_create_ae(self):

        # create admin user
        result = DBConnection().db['users'].find_one(
            {'_id': settings.GHOSTM2M['admin-user']['username']})
        if result is None:
            DBConnection().db['users'].insert_one({
                '_id':
                settings.GHOSTM2M['admin-user']['username'],
                'pwd':
                settings.GHOSTM2M['admin-user']['pwd']
            })

        # send request for create AE
        request = {
            'm2m:rqp': {
                'op':
                1,
                'ty':
                1,
                'pc': {
                    'm2m:ae': {
                        "apn": "lector-tarjetas"
                    }
                },
                'fr':
                '{}:{}'.format(settings.GHOSTM2M['admin-user']['username'],
                               settings.GHOSTM2M['admin-user']['pwd']),
                'to':
                '//localhost:80/Cernicalo'
            }
        }

        response = self.client.post('/~/Cernicalo/',
                                    json.dumps(request),
                                    content_type="application/json")

        self.assertEqual(response.status_code, 200)

        response_content = json.loads(response.content)
        self.assertIn('m2m:rsp', response_content)
        self.assertIn('pc', response_content['m2m:rsp'])
        self.assertIn('m2m:ae', response_content['m2m:rsp']['pc'])
Exemple #4
0
def run():
    """
    reset db
    """
    try:
        DBConnection().db_client.drop_database(settings.GHOSTM2M["dbname"])
        DBConnection().db_client.drop_database('users')
        print('OK')
    except Exception as e:
        print(str(e))

    # create CSEBase
    resource = ResourcesFactory().create(ResourceType.CSEBase.value)
    resource.set_csi(settings.GHOSTM2M['CSE-ID'])

    base = DBConnection().db[settings.GHOSTM2M['CSE-ID']]
    result = base.find_one({
        'ty': ResourceType.CSEBase.value,
        'csi': settings.GHOSTM2M['CSE-ID']
    })
    if result is None:
        ri = CSEBaseMapper().store(settings.GHOSTM2M['CSE-ID'], resource)
        print('Creado CSEBase. ', ri)
    else:
        print('CSEBase ya existe. ', result)

    # create user admin
    try:
        users = DBConnection().db['users']
        result = users.insert_one({
            '_id':
            settings.GHOSTM2M['admin-user']['username'],
            'pwd':
            settings.GHOSTM2M['admin-user']['pwd']
        })
        print("se crea usuario admin")
    except Exception as e:
        print('no se crea usuario admin')
        print(str(e))
Exemple #5
0
 def __init__(self):
     self._db = DBConnection().db
Exemple #6
0
class ResourceMapper:
    def __init__(self):
        self._db = DBConnection().db

    def store(self, cseid, resource):
        if isinstance(resource, Resource):
            to_store = resource.toDict()[resource.get_rtn()].copy()
            to_store['rtn'] = resource.get_rtn()
            to_store['ty'] = resource.ty
            result = self._db[cseid].insert_one(to_store)

            return str(result.inserted_id)
        else:
            raise TypeError

    def retrieve(self, cseid, ft):
        if cseid not in self._db.list_collection_names():
            raise KeyError

        result = self._db[cseid].find_one(ft)

        if result is None:
            return None

        elif 'ty' in result:
            resource = ResourcesFactory().create(ty=result['ty'])
            resource.load(pc={resource.get_rtn(): result})

            rtn = None
            if 'rtn' in result:
                rtn = result['rtn']
                result.pop('rtn')
            else:
                raise KeyError

            _id = None
            if '_id' in result:
                _id = result['_id']
                result.pop('_id')
            else:
                raise KeyError

            resource.load({rtn: result})
            resource.set_id(str(_id))

            return resource

        else:
            raise TypeError

    def discovery(self, cseid, pi, fc):
        mongodb_filter = dict()
        mongodb_filter = fc.copy()

        if 'ty' in mongodb_filter:
            mongodb_filter['ty'] = int(mongodb_filter['ty'])
        #TODO continue with params in Table Summary on Filter conditions (Table 7.3.3.17.0 Document TS-0004)

        mongodb_filter['pi'] = str(pi)
        result = self._db[cseid].find(mongodb_filter)
        ret = list()
        for doc in result:
            ret.append('//{}/{}'.format(cseid, str(doc['_id'])))
        return ret
Exemple #7
0
 def tearDown(self):
     #sys.stderr.write('Eliminar base de datos test.\n')
     DBConnection().db_client.drop_database(
         settings.GHOSTM2M["dbname-test"])
Exemple #8
0
    def test_api_retrieve(self):

        f = ResourcesFactory()

        # create admin user
        result = DBConnection().db['users'].find_one(
            {'_id': settings.GHOSTM2M['admin-user']['username']})
        if result is None:
            DBConnection().db['users'].insert_one({
                '_id':
                settings.GHOSTM2M['admin-user']['username'],
                'pwd':
                settings.GHOSTM2M['admin-user']['pwd']
            })

        # create CSE
        csebase = f.create(ResourceType.CSEBase.value)
        csebase.set_csi(settings.GHOSTM2M['CSE-ID'])
        csebase_ri = CSEBaseMapper().store(settings.GHOSTM2M['CSE-ID'],
                                           csebase)

        # create AE
        ae = f.create(ty=ResourceType.AE.value,
                      pi=csebase_ri,
                      pc={'m2m:ae': {
                          'api': 'test',
                          'apn': 'rfid-reader'
                      }})

        ae_mapper = MappersFactory().get(ae)
        ae_ri = ae_mapper.store(settings.GHOSTM2M['CSE-ID'], ae)
        ae.set_id(ae_ri)

        # create Container
        cnt = f.create(ty=ResourceType.container.value,
                       pi=ae_ri,
                       pc={'m2m:cnt': {
                           'rn': 'corner-rfids'
                       }})
        cnt_mapper = MappersFactory().get(cnt)
        cnt_ri = cnt_mapper.store(settings.GHOSTM2M['CSE-ID'], cnt)
        cnt.set_id(cnt_ri)

        # create ContentInstance
        cin = f.create(ty=ResourceType.contentInstance.value,
                       pi=cnt_ri,
                       pc={'m2m:cin': {
                           'con': 'abcdef'
                       }})
        cin_mapper = MappersFactory().get(cin)
        cin_ri = cin_mapper.store(settings.GHOSTM2M['CSE-ID'], cin)
        cin.set_id(cin_ri)

        # Request CSE
        #
        request = {
            'm2m:rqp': {
                'op':
                Operation.Retrieve.value,
                'fr':
                '{}:{}'.format(settings.GHOSTM2M['admin-user']['username'],
                               settings.GHOSTM2M['admin-user']['pwd']),
                'to':
                '/~/Cernicalo',
            }
        }
        request_str = json.dumps(request)
        response = self.client.generic('GET', '/~/Cernicalo', request_str,
                                       'application/json')
        self.assertEqual(response.status_code, 200)
        response_cse = json.loads(response.content)['m2m:rsp']
        self.assertIn('rsc', response_cse)
        self.assertEqual(response_cse['rsc'], ResponseStatusCode.OK.value)

        # Request AE
        request = {
            'm2m:rqp': {
                'op':
                Operation.Retrieve.value,
                'fr':
                '{}:{}'.format(settings.GHOSTM2M['admin-user']['username'],
                               settings.GHOSTM2M['admin-user']['pwd']),
                'to':
                '/~/Cernicalo',
            }
        }

        request_str = json.dumps(request)
        response = self.client.generic('GET', '/~/Cernicalo/{}'.format(ae_ri),
                                       request_str, 'application/json')
        self.assertEqual(response.status_code, 200)
        response_ae = json.loads(response.content)['m2m:rsp']
        self.assertIn('pc', response_ae)
        self.assertIn('m2m:ae', response_ae['pc'])
        self.assertIn('apn', response_ae['pc']['m2m:ae'])
        self.assertIn('ri', response_ae['pc']['m2m:ae'])

        # Request Container
        request = {
            'm2m:rqp': {
                'op':
                Operation.Retrieve.value,
                'fr':
                '{}:{}'.format(settings.GHOSTM2M['admin-user']['username'],
                               settings.GHOSTM2M['admin-user']['pwd']),
                'to':
                '/~/Cernicalo',
            }
        }

        request_str = json.dumps(request)
        response = self.client.generic('GET', '/~/Cernicalo/{}'.format(cnt_ri),
                                       request_str, 'application/json')
        self.assertEqual(response.status_code, 200)
        response_cnt = json.loads(response.content)['m2m:rsp']
        self.assertIn('pc', response_cnt)
        self.assertIn('m2m:cnt', response_cnt['pc'])
        self.assertIn('rn', response_cnt['pc']['m2m:cnt'])
        self.assertIn('ri', response_cnt['pc']['m2m:cnt'])
        self.assertIn('cni', response_cnt['pc']['m2m:cnt'])
        self.assertEqual(response_cnt['pc']['m2m:cnt']['cni'], 1)

        # Request ContentInstance
        request = {
            'm2m:rqp': {
                'op':
                Operation.Retrieve.value,
                'fr':
                '{}:{}'.format(settings.GHOSTM2M['admin-user']['username'],
                               settings.GHOSTM2M['admin-user']['pwd']),
                'to':
                '/~/Cernicalo',
            }
        }

        request_str = json.dumps(request)
        response = self.client.generic('GET', '/~/Cernicalo/{}'.format(cin_ri),
                                       request_str, 'application/json')
        self.assertEqual(response.status_code, 200)
        response_cin = json.loads(response.content)['m2m:rsp']
        self.assertIn('pc', response_cin)
        self.assertIn('m2m:cin', response_cin['pc'])
        self.assertIn('con', response_cin['pc']['m2m:cin'])
        self.assertIn('ri', response_cin['pc']['m2m:cin'])
        self.assertIn('pi', response_cin['pc']['m2m:cin'])
        self.assertEqual(response_cin['pc']['m2m:cin']['pi'], cnt_ri)

        # Request <last> <ContentInstance>
        request = {
            'm2m:rqp': {
                'op':
                Operation.Retrieve.value,
                'fr':
                '{}:{}'.format(settings.GHOSTM2M['admin-user']['username'],
                               settings.GHOSTM2M['admin-user']['pwd']),
                'to':
                '/~/Cernicalo',
            }
        }
        request_str = json.dumps(request)
        response = self.client.generic('GET',
                                       '/~/Cernicalo/{}/la'.format(cnt_ri),
                                       request_str, 'application/json')
        self.assertEqual(response.status_code, 200)
        response_la = json.loads(response.content)['m2m:rsp']
        self.assertIn('pc', response_cin)

        # Check updated parent <Container>
        request = {
            'm2m:rqp': {
                'op':
                Operation.Retrieve.value,
                'fr':
                '{}:{}'.format(settings.GHOSTM2M['admin-user']['username'],
                               settings.GHOSTM2M['admin-user']['pwd']),
                'to':
                '/~/Cernicalo',
            }
        }

        request_str = json.dumps(request)
        response = self.client.generic('GET', '/~/Cernicalo/{}'.format(cnt_ri),
                                       request_str, 'application/json')
        self.assertEqual(response.status_code, 200)
        response_cnt = json.loads(response.content)['m2m:rsp']
        self.assertIn('pc', response_cnt)
        self.assertIn('m2m:cnt', response_cnt['pc'])
        self.assertIn('rn', response_cnt['pc']['m2m:cnt'])
        self.assertIn('ri', response_cnt['pc']['m2m:cnt'])

        self.assertIn('la', response_cnt['pc']['m2m:cnt'])
        self.assertEqual(response_cnt['pc']['m2m:cnt']['la'], cin_ri)

        # create another ContentInstance
        cin = f.create(ty=ResourceType.contentInstance.value,
                       pi=cnt_ri,
                       pc={'m2m:cin': {
                           'con': 'segundocontent'
                       }})
        cin_mapper = MappersFactory().get(cin)
        cin_ri = cin_mapper.store(settings.GHOSTM2M['CSE-ID'], cin)
        cin.set_id(cin_ri)

        request_str = json.dumps(request)
        response = self.client.generic('GET', '/~/Cernicalo/{}'.format(cnt_ri),
                                       request_str, 'application/json')
        self.assertEqual(response.status_code, 200)
        response_cnt = json.loads(response.content)['m2m:rsp']

        self.assertIn('cni', response_cnt['pc']['m2m:cnt'])
        self.assertEqual(response_cnt['pc']['m2m:cnt']['cni'], 2)

        self.assertIn('la', response_cnt['pc']['m2m:cnt'])
        self.assertEqual(response_cnt['pc']['m2m:cnt']['la'], cin_ri)

        request_str = json.dumps(request)
        response = self.client.generic(
            'GET',
            '/~/Cernicalo/{}?ty={}'.format(cnt_ri,
                                           ResourceType.contentInstance.value),
            request_str, 'application/json')

        self.assertEqual(response.status_code, 200)
        self.assertIn('m2m:rsp', json.loads(response.content))
        response_discovery = json.loads(response.content)['m2m:rsp']
        self.assertIn('pc', response_discovery)
        self.assertIn('m2m:uril', response_discovery['pc'])
        self.assertIsInstance(response_discovery['pc']['m2m:uril'], list)
Exemple #9
0
    def test_api_create_cin(self):
        # create admin user
        result = DBConnection().db['users'].find_one(
            {'_id': settings.GHOSTM2M['admin-user']['username']})
        if result is None:
            DBConnection().db['users'].insert_one({
                '_id':
                settings.GHOSTM2M['admin-user']['username'],
                'pwd':
                settings.GHOSTM2M['admin-user']['pwd']
            })

        # send request for create AE
        request = {
            'm2m:rqp': {
                'op':
                1,
                'ty':
                1,
                'pc': {
                    'm2m:ae': {
                        "apn": "lector-tarjetas"
                    }
                },
                'fr':
                '{}:{}'.format(settings.GHOSTM2M['admin-user']['username'],
                               settings.GHOSTM2M['admin-user']['pwd']),
                'to':
                '//localhost:80/Cernicalo'
            }
        }

        response = self.client.post('/~/Cernicalo/',
                                    json.dumps(request),
                                    content_type="application/json")

        self.assertEqual(response.status_code, 200)
        response_ae = json.loads(response.content)['m2m:rsp']

        factory = ResourcesFactory()
        parent_ae = factory.create(request['m2m:rqp']['ty'],
                                   pc=response_ae['pc'])

        request = {
            'm2m:rqp': {
                'op':
                Operation.Create.value,
                'ty':
                ResourceType.container.value,
                'pc': {
                    'm2m:cnt': {
                        'rn': 'corners-rfids'
                    }
                },
                'fr':
                '{}:{}'.format(settings.GHOSTM2M['admin-user']['username'],
                               settings.GHOSTM2M['admin-user']['pwd']),
                'to':
                '/~/Cernicalo/{}'.format(parent_ae.ri),
            }
        }
        response = self.client.post('/~/Cernicalo/{}'.format(parent_ae.ri),
                                    json.dumps(request),
                                    content_type="application/json")

        self.assertEqual(response.status_code, 200)
        response_cnt = json.loads(response.content)['m2m:rsp']
        cnt = factory.create(request['m2m:rqp']['ty'], pc=response_cnt['pc'])

        request = {
            'm2m:rqp': {
                'op':
                Operation.Create.value,
                'ty':
                ResourceType.contentInstance.value,
                'pc': {
                    'm2m:cin': {
                        'con': 'hola mundo!'
                    }
                },
                'fr':
                '{}:{}'.format(settings.GHOSTM2M['admin-user']['username'],
                               settings.GHOSTM2M['admin-user']['pwd']),
                'to':
                '/~/Cernicalo/{}'.format(cnt.ri),
            }
        }

        response = self.client.post('/~/Cernicalo/{}'.format(cnt.ri),
                                    json.dumps(request),
                                    content_type="application/json")

        self.assertIn('m2m:rsp', json.loads(response.content))
        response_cin = json.loads(response.content)['m2m:rsp']

        self.assertIn('m2m:cin', response_cin['pc'])

        cin = factory.create(request['m2m:rqp']['ty'], pc=response_cin['pc'])

        self.assertIsInstance(cin, ContentInstance)
        self.assertEqual(cin.pi, cnt.ri)
        self.assertEqual(cin.con, 'hola mundo!')

        parent = ResourceMapper().retrieve(cseid=settings.GHOSTM2M['CSE-ID'],
                                           ft={'_id': ObjectId(cin.pi)})
        self.assertIsInstance(parent, Container)
        self.assertNotEqual(parent.la, None)
Exemple #10
0
 def setUp(self):
     self.c = Client()
     settings.GHOSTM2M["dbname-test"]
     DBConnection().set_db(settings.GHOSTM2M["dbname-test"])