-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest_genezio_create.py
150 lines (122 loc) · 4.74 KB
/
test_genezio_create.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#!/usr/bin/python3
import os
from genezio import genezio_deploy, genezio_login, genezio_local, genezio_delete, genezio_create
from utils import kill_process
def initialize_test_environment():
"""
Set up the environment for testing, including changing to the appropriate directory and logging in to genezio.
"""
token = os.environ.get('GENEZIO_TOKEN')
project_root = os.path.join(os.getcwd(), "projects", "create")
os.makedirs(project_root, exist_ok=True)
os.chdir(project_root)
genezio_login(token)
return project_root
def generate_project_variants():
"""
Generate a list of all project configurations to be tested.
"""
backend_variants = ["ts", "js"]
frontend_variants = ["react-ts", "react-js", "vue-ts", "vue-js", "svelte-ts", "svelte-js"]
project_types = ["fullstack", "backend", "nextjs", "expressjs", "serverless"]
projects = []
for project_type in project_types:
if project_type == "fullstack":
for backend in backend_variants:
for frontend in frontend_variants:
projects.append({
"type": project_type,
"name": f"test-{project_type}-{backend}-{frontend}",
"region": "us-east-1",
"backend": backend,
"frontend": frontend,
"test_local": True
})
elif project_type == "backend":
for backend in backend_variants:
projects.append({
"type": project_type,
"name": f"test-{project_type}-{backend}",
"region": "us-east-1",
"backend": backend,
"test_local": True
})
elif project_type == "nextjs" or project_type == "nitrojs":
projects.append({
"type": project_type,
"name": f"test-{project_type}",
"region": "us-east-1",
"test_local": False
})
else:
projects.append({
"type": project_type,
"name": f"test-{project_type}",
"region": "us-east-1",
"test_local": True
})
return projects
def create_and_test_project(project):
"""
Create, deploy, test locally, and then delete the project.
:param project: A dictionary containing the project configuration.
"""
project_name = project["name"]
if os.path.exists(project_name):
os.chmod(project_name, 0o777)
os.remove(project_name)
print(f"Creating project {project_name}...")
try:
create_project(project)
os.chdir(project_name)
deploy_result = genezio_deploy(False)
assert deploy_result.return_code == 0, f"genezio deploy failed for {project_name}"
assert deploy_result.project_url, f"genezio deploy returned empty project URL for {project_name}"
if project["test_local"]:
process_local = genezio_local()
assert process_local, f"genezio local failed for {project_name}"
kill_process(process_local)
print(f"Deleting project {project_name}...")
genezio_delete(deploy_result.project_id)
finally:
os.chdir("..")
def create_project(project):
"""
Create a genezio project based on the provided configuration.
:param project: A dictionary containing the project configuration.
:raises ValueError: If required parameters are missing.
"""
if project["type"] == "fullstack":
create_result = genezio_create(
project_type=project["type"],
name=project["name"],
region=project["region"],
backend=project["backend"],
frontend=project["frontend"]
)
elif project["type"] == "backend":
create_result = genezio_create(
project_type=project["type"],
name=project["name"],
region=project["region"],
backend=project["backend"]
)
else:
create_result = genezio_create(
project_type=project["type"],
name=project["name"],
region=project["region"]
)
assert create_result == 0, f"genezio create {project['type']} failed for {project['name']}"
def test_genezio_create():
"""
Main function to test genezio project creation, deployment, local testing, and deletion.
"""
print("Starting genezio create test...")
project_root = initialize_test_environment()
projects_to_test = generate_project_variants()
for project in projects_to_test:
create_and_test_project(project)
print("All tests passed!")
if __name__ == '__main__':
test_genezio_create()