Skip to content
This repository has been archived by the owner on Jun 15, 2019. It is now read-only.

Commit

Permalink
chore(*): fix utils tests and scripts directory
Browse files Browse the repository at this point in the history
  • Loading branch information
xav-b committed Feb 17, 2014
1 parent 96d9647 commit 9bd9ab1
Show file tree
Hide file tree
Showing 14 changed files with 55 additions and 130 deletions.
2 changes: 1 addition & 1 deletion Procfile
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
web: hivy --bind 0.0.0.0
web: hivy --bind 0.0.0.0 --debug
serf: serf agent -node hivy -tag role=master -event-handler hivy-watchdog
# salt: salt-master -l debug -c /etc/salt
5 changes: 4 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,9 @@ curl http://0.0.0.0:5000/v0/doc
# Create a new environment
curl -X POST -H "Authorization:<ACCESS_TOKEN>" http://0.0.0.0:5000/v0/node

# Get some feedback
curl -H "Authorization:<ACCESS_TOKEN>" http://0.0.0.0:5000/v0/node

# Destroy it
curl -X DELETE -H "Authorization:<ACCESS_TOKEN>" http://0.0.0.0:5000/v0/node
```
Expand All @@ -62,7 +65,7 @@ Tests
-----

```console
$ Make tests
$ make tests

$ # If docker is installed, you can test node interactions as well
$ USE_DOCKER=true make tests
Expand Down
3 changes: 2 additions & 1 deletion docker/hivy/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
# VERSION 0.1.0

# Administration
# hivetech/pyscience is an ubuntu 13.10 image with most popular python packages
FROM quay.io/hackliff/node
MAINTAINER Xavier Bruhiere <xavier.bruhiere@gmail.com>

Expand All @@ -26,6 +25,8 @@ RUN git clone --branch develop --depth 1 https://github.com/hivetech/hivy.git &&
python setup.py install

ENV NODE_ID hivy
ENV NODE_ROLE master
ADD ./startup-serf /usr/local/bin/startup-serf
ADD ./supervisor-hivy.conf /etc/supervisord.conf

ENTRYPOINT ["/usr/bin/supervisord"]
Expand Down
7 changes: 7 additions & 0 deletions docker/hivy/startup-serf
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#! /bin/bash

if [ -z "$NODE_ID" ]; then
export NODE_ID="$(hostname)"
fi

/usr/local/bin/serf agent -node $NODE_ID -tag role=$NODE_ROLE -event-handler hivy-watchdog
25 changes: 8 additions & 17 deletions hivy/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,28 +2,19 @@
# -*- coding: utf-8 -*-
# vim:fenc=utf-8

'''Hivy
'''
Hivy Flask app
--------------
Usage:
hivy -h | --help
hivy --version
hivy [--bind=<ip>] [--port=<port>] [-d | --debug] [--log <level>]
Entry point, invoke as `http` or `python -m httpie`
Options:
-h --help Show this screen.
--version Show version.
--debug Activates Flask debug
--bind=<ip> Listens on the given ip [default: 127.0.0.1]
--port=<port> Listens on the given port [default: 5000]
--log=<level> Log output level [default: debug]
:copyright (c) 2014 Hive Tech, SAS.
:license: %LICENCE%, see LICENSE for more details.
'''

import sys
from docopt import docopt
from hivy import __version__
from hivy.core import main
import sys


if __name__ == '__main__':
args = docopt(__doc__, version='Hivy, Hive api {}'.format(__version__))
sys.exit(main(args))
sys.exit(main())
23 changes: 17 additions & 6 deletions hivy/core.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,28 @@
# -*- coding: utf-8 -*-
# vim:fenc=utf-8

'''
Hivy Flask app
--------------
'''Hivy
Usage:
hivy -h | --help
hivy --version
hivy [--bind=<ip>] [--port=<port>] [-d | --debug] [--log <level>]
:copyright (c) 2014 Hive Tech, SAS.
:license: %LICENCE%, see LICENSE for more details.
Options:
-h --help Show this screen.
--version Show version.
--debug Activates Flask debug
--bind=<ip> Listens on the given ip [default: 127.0.0.1]
--port=<port> Listens on the given port [default: 5000]
--log=<level> Log output level [default: debug]
'''


from flask import Flask
from flask.ext import restful
import os
from docopt import docopt
from hivy import __version__
import hivy.conf as conf
import hivy.logger as logger

Expand All @@ -31,7 +41,8 @@
api.add_resource(resource, endpoint)


def main(args):
def main():
args = docopt(__doc__, version='Hivy, Hive api {}'.format(__version__))
try:
log_setup = logger.setup(level=args['--log'], show_log=args['--debug'])
with log_setup.applicationbound():
Expand Down
2 changes: 1 addition & 1 deletion hivy/resources/system.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ def get(self):
'sub-systems': {
'docker': docker_status,
'salt-master': 'not implemented',
'serf': utils.is_available('serf')
'serf': utils.is_running('serf')
}
},
'version': {
Expand Down
11 changes: 9 additions & 2 deletions hivy/test.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,16 @@
:license: Apache 2.0, see LICENSE for more details.
'''

import os
import hivy.utils as utils


def docker_required(function):
''' Run the provided function only if we can reach the docker server '''
def inner(*args, **kwargs):
''' decorator '''
if utils.is_available('docker'):
_, status = utils.docker_check()
if status and is_allowed('docker'):
return function(*args, **kwargs)
else:
pass
Expand All @@ -29,8 +31,13 @@ def serf_required(function):
''' Run the provided function only if we can reach the serf cluster '''
def inner(*args, **kwargs):
''' decorator '''
if utils.is_available('serf'):
if utils.is_running('serf') and is_allowed('serf'):
return function(*args, **kwargs)
else:
pass
return inner


def is_allowed(command):
''' Mark "command" as available if running and allowed '''
return os.environ.get('USE_{}'.format(command.upper()))
10 changes: 0 additions & 10 deletions hivy/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,16 +41,6 @@ def is_running(process):
return flag


def is_available(command):
''' Mark "command" as available if running and allowed '''
if command == 'docker':
_, status = docker_check()
else:
status = is_running(command)
return (status and
os.environ.get('USE_{}'.format(command.upper())))


def generate_random_name(size=8, chars=string.ascii_lowercase + string.digits):
''' Create a random name to assign to a node '''
return ''.join(random.choice(chars) for _ in range(size))
Expand Down
File renamed without changes.
File renamed without changes.
14 changes: 5 additions & 9 deletions tests/test_system.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
import unittest
from hivy import __api__
from hivy.core import app
import hivy.utils as utils


# http://flask.pocoo.org/docs/testing/
Expand All @@ -26,14 +25,11 @@ def test_get_status(self):
self.assertTrue(service in res.data)

def test_get_version(self):
if utils.is_available('serf'):
res = self.app.get('/')
for info in ['major', 'minor', 'patch']:
self.assertTrue(info in res.data)
for service in ['docker', 'salt', 'serf']:
self.assertTrue(service in res.data)
else:
pass
res = self.app.get('/')
for info in ['major', 'minor', 'patch']:
self.assertTrue(info in res.data)
for service in ['docker', 'salt', 'serf']:
self.assertTrue(service in res.data)

def test_get_v0_doc(self):
res = self.app.get('/v0/doc')
Expand Down
43 changes: 0 additions & 43 deletions tests/test_test.py

This file was deleted.

40 changes: 1 addition & 39 deletions tests/test_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,9 @@
# Copyright (C) 2014 Hive Tech, SAS.


import os
import unittest
import hivy.utils as utils
import hivy.test as test
#import hivy.test as test


class UtilsTestCase(unittest.TestCase):
Expand Down Expand Up @@ -40,27 +39,6 @@ def test_running_process_detection(self):
def test_not_running_process_detection(self):
self.assertFalse(utils.is_running('no_chance_this_program_is_running'))

def test_subsystem_available_and_allowed(self):
os.environ.update({'USE_{}'.format(
self.always_running_process.upper()): True})
is_available = utils.is_available(self.always_running_process)
self.assertTrue(is_available)
os.environ.pop('USE_{}'.format(self.always_running_process.upper()))

def test_subsystem_available_but_not_allowed(self):
is_available = utils.is_available(self.always_running_process)
self.assertFalse(is_available)

def test_subsystem_not_available_and_not_allowed(self):
is_available = utils.is_available('program_not_running')
self.assertFalse(is_available)

def test_subsystem_not_available_but_allowed(self):
os.environ.update({'USE_PROGRAM_NOT_RUNNING': True})
is_available = utils.is_available('program_not_running')
self.assertFalse(is_available)
os.environ.pop('USE_PROGRAM_NOT_RUNNING')

def test_generate_name(self):
new_name = utils.generate_random_name()
#TODO Regex validation
Expand All @@ -79,19 +57,3 @@ def test_id_generator_unicity(self):
old_id = new_id
new_id = utils.generate_unique_id()
self.assertTrue(new_id != old_id)

@test.docker_required
def test_detect_docker_available(self):
os.environ.update({'USE_DOCKER': True})
is_available = utils.is_available('docker')
self.assertTrue(is_available)
os.environ.pop('USE_DOCKER')

def test_handle_docker_not_available(self):
#TODO with a wrong DOCKER_URL
os.environ.update({'DOCKER_URL': 'http://1.2.3.4.:4243'})
os.environ.update({'USE_DOCKER': True})
is_available = utils.is_available('docker')
self.assertFalse(is_available)
os.environ.pop('USE_DOCKER')
pass

0 comments on commit 9bd9ab1

Please sign in to comment.