Skip to content

Commit

Permalink
Update flask_container_ci challenge
Browse files Browse the repository at this point in the history
  • Loading branch information
abregman committed Dec 23, 2019
1 parent dc802d4 commit e08c1cb
Show file tree
Hide file tree
Showing 4 changed files with 79 additions and 19 deletions.
12 changes: 9 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

:information_source:  This repository contains questions on various DevOps and SRE related topics

:bar_chart:  There are currently **700** questions
:bar_chart:  There are currently **701** questions

:books:  To learn more about DevOps check the resources in [DevOpsBit.com](https://devopsbit.com)

Expand All @@ -23,7 +23,7 @@
<table>
<tr>
<td align="center"><a href="#devops"><img src="images/devops.png" width="70px;" height="75px;" alt="DevOps" /><br /><b>DevOps</b></a><br /><sub><a href="#devops-beginner">Beginner :baby:</a></sub><br><sub><a href="#devops-advanced">Advanced :star:</a></sub></td>
<td align="center"><a href="#jenkins"><img src="images/jenkins.png" width="80px;" height="85px;" alt="Jenkins"/><br /><b>Jenkins</b></a><br /><sub><a href="#jenkins-beginner">Beginner :baby:</a></sub><br><sub><a href="#jenkins-advanced">Advanced :star:</a></sub></td>
<td align="center"><a href="#jenkins"><img src="images/jenkins.png" width="85px;" height="85px;" alt="Jenkins"/><br /><b>Jenkins</b></a><br /><sub><a href="#jenkins-beginner">Beginner :baby:</a></sub><br><sub><a href="#jenkins-advanced">Advanced :star:</a></sub></td>
<td align="center"><a href="#git"><img src="images/git.png" width="80px;" height="75px;" alt="Git"/><br /><b>Git</b></a><br /><sub><a href="#git-beginner">Beginner :baby:</a></sub><br><sub><a href="#git-advanced">Advanced :star:</a></sub></td>
<td align="center"><a href="#ansible"><img src="images/ansible.png" width="65px;" height="75px;" alt="Ansible"/><br /><b>Ansible</b></a><br /><sub><a href="#ansible-beginner">Beginner :baby:</a></sub><br><sub><a href="#ansible-advanced">Advanced :star:</a></sub></td>
<td align="center"><a href="#Network"><img src="images/network.png" width="80x;" height="75px;" alt="Network"/><br /><b>Network</b></a><br /><sub><a href="#network-beginner">Beginner :baby:</a></sub><br><sub><a href="#network-advanced">Advanced :star:</a></sub></td>
Expand Down Expand Up @@ -1664,14 +1664,20 @@ Re-install the OS IS NOT the right answer :)
<summary>What is sudo? How do you set it up?</summary><br><b>
</b></details>

##### Random and Strange :)
#### Random and Strange :)

<details>
<summary>Give 5 commands which are two letters long</summary><br><b>

ls, wc, dd, df, du, ps, ip, cp, cd ...
</b></details>

#### Commands

<details>
<summary>What the lsof command does?</summary><br><b>
</b></details>

<a name="linux-advanced"></a>
#### :star: Advanced

Expand Down
4 changes: 2 additions & 2 deletions challenges/flask_container_ci/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ Please read carefully all the instructions.
If any of the following steps is not working, it is expected from you to fix them

1. Move to `challenges/flask_container_ci` directory, if you are not already there
1. Run `export FLASK_APP=app/app.py`
1. Run `export FLASK_APP=app/main.py`
1. To run the app execute `flask run`. If it doesn't works, fix it
3. Access `http://127.0.0.1:5000`. You should see the following

Expand Down Expand Up @@ -50,7 +50,7 @@ docker run -d -p 5000:5000 app
Great, now that we have a working app and also can run it in a container, let's set up a CI for it so it won't break again in the future
In current directory you have a file called tests.py which includes the tests for the app. What is expected from you is:

1. The CI should run the app tests. You are free to choose whatever CI system or service you prefer.
1. The CI should run the app tests. You are free to choose whatever CI system or service you prefer. Use `python tests.py` for running the tests.
2. There should be some kind of test for the Dockerfile you wrote
3. Add additional unit test (or another level of tests) for testing the app

Expand Down
58 changes: 58 additions & 0 deletions challenges/flask_container_ci/app/main.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
#!/usr/bin/env python
# coding=utf-8

from flask import Flask
from flask import make_response

import json
from werkzeug.exceptions import NotFound


app = Flask(__name__)

with open("./users.json", "r") as f:
users = json.load(f)


@app.route("/", methods=['GET'])
def index():
return pretty_json({
"resources": {
"users": "/users",
"user": "/users/<username>",
},
"current_uri": "/"
})


@app.route("/users", methods=['GET'])
def all_users():
return pretty_json(users)


@app.route("/users/<username>", methods=['GET'])
def user_data(username):
if username not in users:
raise NotFound

return pretty_json(users[username])


@app.route("/users/<username>/something", methods=['GET'])
def user_something(username):
raise NotImplementedError()


def pretty_json(arg):
response = make_response(json.dumps(arg, sort_keys=True, indent=4))
response.headers['Content-type'] = "application/json"
return response


def create_test_app():
app = Flask(__name__)
return app


if __name__ == "__main__":
app.run(port=5000)
24 changes: 10 additions & 14 deletions challenges/flask_container_ci/tests.py
Original file line number Diff line number Diff line change
@@ -1,27 +1,23 @@
#!/usr/bin/env python
# coding=utf-8

import os
import unittest

from config import basedir
from app import app
from app import db
from app import main


class TestCase(unittest.TestCase):

def setUp(self):
app.config['TESTING'] = True
app.config['WTF_CSRF_ENABLED'] = False
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(
basedir, 'test.db')
self.app = app.test_client()
db.create_all()

def tearDown(self):
db.session.remove()
db.drop_all()
self.app = main.app.test_client()

def test_main_page(self):
response = self.app.get('/', follow_redirects=True)
self.assertEqual(response.status_code, 200)

def test_users_page(self):
response = self.app.get('/users', follow_redirects=True)
self.assertEqual(response.status_code, 200)


if __name__ == '__main__':
Expand Down

0 comments on commit e08c1cb

Please sign in to comment.