334 lines
8.0 KiB
Markdown
334 lines
8.0 KiB
Markdown
# Verification Steps for sync-git-project.sh
|
|
|
|
This document outlines testing steps and edge cases for verifying the enhanced `sync-git-project.sh` script.
|
|
|
|
## Prerequisites
|
|
|
|
Before testing, ensure you have:
|
|
- A test server with SSH access
|
|
- A git repository on the server
|
|
- `sshpass` installed locally
|
|
- Docker installed and running
|
|
- `make` available
|
|
|
|
## Test Cases
|
|
|
|
### 1. Clone Test
|
|
**Purpose:** Verify git clone works with credentials
|
|
|
|
**Steps:**
|
|
1. Run `./sync-project.sh --git`
|
|
2. Provide valid server credentials
|
|
3. Verify repository is cloned to LOCAL_FOLDER
|
|
|
|
**Expected:** Repository cloned successfully, cd into project works
|
|
|
|
**Edge cases:**
|
|
- Wrong SSH credentials → Should show error and exit
|
|
- Repository doesn't exist → Should show clear error message
|
|
- LOCAL_FOLDER already exists → Git will fail with appropriate error
|
|
|
|
---
|
|
|
|
### 2. .npmrc Check
|
|
**Purpose:** Test with/without .npmrc file
|
|
|
|
**Steps:**
|
|
1. Clone a project without .npmrc
|
|
2. Verify script pauses and prompts user
|
|
3. Add .npmrc file
|
|
4. Press Enter to continue
|
|
|
|
**Expected:** Script pauses with clear message, continues after file added
|
|
|
|
---
|
|
|
|
### 3. Docker Env Copy
|
|
**Purpose:** Verify .docker/config/.env.local exists and copies correctly
|
|
|
|
**Steps:**
|
|
1. Ensure .docker/config/.env.local exists in repo
|
|
2. Run setup
|
|
3. Verify .env created in project root
|
|
|
|
**Expected:** `.env` copied from `.docker/config/.env.local`
|
|
|
|
**Edge cases:**
|
|
- .docker/config/.env.local missing → Pause and prompt user
|
|
|
|
---
|
|
|
|
### 4. Clean Docker Volumes
|
|
**Purpose:** Verify Docker volumes are cleaned before setup
|
|
|
|
**Steps:**
|
|
1. Have existing Docker containers and volumes running
|
|
2. Run setup
|
|
3. Verify all containers stopped and removed
|
|
4. Verify all volumes removed
|
|
|
|
**Expected:**
|
|
- `docker ps -a` shows no containers
|
|
- `docker volume ls` shows no volumes
|
|
|
|
**Edge cases:**
|
|
- No containers running → Commands succeed silently
|
|
- No volumes exist → Commands succeed silently
|
|
|
|
---
|
|
|
|
### 5. Docker Setup
|
|
**Purpose:** Test with/without docker-setup.sh present
|
|
|
|
**Steps:**
|
|
1. Test with project containing docker-setup.sh
|
|
2. Test with project missing docker-setup.sh
|
|
|
|
**Expected:**
|
|
- With script: Runs `sh docker-setup.sh`
|
|
- Without script: Pauses and notifies user
|
|
|
|
---
|
|
|
|
### 6. Server .env Copy
|
|
**Purpose:** Verify scp copies .env to .server.env
|
|
|
|
**Steps:**
|
|
1. Ensure .env exists on server
|
|
2. Run setup
|
|
3. Verify .server.env created locally
|
|
4. Run `git ls-files -v | grep .server.env` to verify assume-unchanged
|
|
|
|
**Expected:** .server.env copied and marked with 'h' (assume-unchanged)
|
|
|
|
**Edge cases:**
|
|
- Server .env missing → Pause and prompt user
|
|
|
|
---
|
|
|
|
### 7. .env Modification
|
|
**Purpose:** Check APP_NAME/APP_KEY extraction and insertion
|
|
|
|
**Steps:**
|
|
1. Verify .server.env contains APP_NAME and APP_KEY
|
|
2. Run setup
|
|
3. Check local .env for updated values
|
|
|
|
**Expected:** APP_NAME and APP_KEY from .server.env appear in local .env
|
|
|
|
**Edge cases:**
|
|
- APP_NAME missing in .server.env → Yellow warning, continues
|
|
- APP_KEY missing in .server.env → Yellow warning, continues
|
|
|
|
---
|
|
|
|
### 8. .env.prod.local Creation
|
|
**Purpose:** Verify all 5 variables populated correctly
|
|
|
|
**Steps:**
|
|
1. Run setup with valid server credentials
|
|
2. Check .env.prod.local contents
|
|
|
|
**Expected file contents:**
|
|
```
|
|
PROD_HOST="<extracted from SERVER_HOST>"
|
|
PROD_USER="<extracted from SERVER_HOST>"
|
|
PROD_DB_NAME="<DB_DATABASE from .server.env>"
|
|
PROD_DB_USER="<DB_USERNAME from .server.env>"
|
|
PROD_DB_PASS="<DB_PASSWORD from .server.env>"
|
|
```
|
|
|
|
---
|
|
|
|
### 9. Helper Scripts
|
|
**Purpose:** Verify ssh.sh created correctly
|
|
|
|
**Steps:**
|
|
1. Run setup
|
|
2. Check ssh.sh exists with executable permission
|
|
3. Verify ssh.sh contains correct variables
|
|
4. Check .gitignore includes ssh.sh
|
|
|
|
**Expected:** ssh.sh created with embedded credentials, added to .gitignore
|
|
|
|
---
|
|
|
|
### 10. Lazygit Upload
|
|
**Purpose:** Verify upload and assume-unchanged on both server and local
|
|
|
|
**Steps:**
|
|
1. Run setup
|
|
2. SSH to server, check lazygit exists in project
|
|
3. On server: `git ls-files -v | grep lazygit` shows 'h'
|
|
4. Locally: `git ls-files -v | grep lazygit` shows 'h'
|
|
|
|
**Expected:** lazygit uploaded and marked assume-unchanged on both ends
|
|
|
|
---
|
|
|
|
### 11. SSH Keys - Case A
|
|
**Purpose:** Server with only public key
|
|
|
|
**Setup:**
|
|
```bash
|
|
# On server
|
|
rm ~/.ssh/id_rsa
|
|
# Keep ~/.ssh/id_rsa.pub
|
|
```
|
|
|
|
**Steps:**
|
|
1. Run setup
|
|
2. Verify staging.key created locally
|
|
3. Verify both keys uploaded to server
|
|
4. Verify public key added to authorized_keys
|
|
|
|
**Expected:** New keypair generated, uploaded, authorized
|
|
|
|
---
|
|
|
|
### 12. SSH Keys - Case B
|
|
**Purpose:** Server with both keys
|
|
|
|
**Setup:**
|
|
```bash
|
|
# Server has both ~/.ssh/id_rsa and ~/.ssh/id_rsa.pub
|
|
```
|
|
|
|
**Steps:**
|
|
1. Run setup
|
|
2. Verify staging.key downloaded (matches server's id_rsa)
|
|
3. Verify public key in authorized_keys
|
|
|
|
**Expected:** Private key downloaded as staging.key
|
|
|
|
---
|
|
|
|
### 13. SSH Keys - Case C
|
|
**Purpose:** Server with neither key
|
|
|
|
**Setup:**
|
|
```bash
|
|
# On server
|
|
rm -rf ~/.ssh/id_rsa ~/.ssh/id_rsa.pub
|
|
# or rm -rf ~/.ssh
|
|
```
|
|
|
|
**Steps:**
|
|
1. Run setup
|
|
2. Verify ~/.ssh created on server
|
|
3. Verify both keys uploaded
|
|
4. Verify authorized_keys created/updated
|
|
|
|
**Expected:** New keypair generated, ~/.ssh created, keys uploaded
|
|
|
|
---
|
|
|
|
### 14. staging.key Assume-Unchanged
|
|
**Purpose:** Verify git tracking status
|
|
|
|
**Steps:**
|
|
1. After setup, run: `git ls-files -v | grep staging.key`
|
|
|
|
**Expected:** Output shows 'h staging.key' (lowercase h = assume-unchanged)
|
|
|
|
---
|
|
|
|
### 15. SSH-Add
|
|
**Purpose:** Verify key added to agent
|
|
|
|
**Steps:**
|
|
1. Ensure ssh-agent is running: `eval $(ssh-agent -s)`
|
|
2. Run setup
|
|
3. Check: `ssh-add -l` should show staging.key
|
|
|
|
**Expected:** staging.key fingerprint shown in ssh-add -l
|
|
|
|
**Edge cases:**
|
|
- ssh-agent not running → Pause with instructions
|
|
|
|
---
|
|
|
|
### 16. db:wipe
|
|
**Purpose:** Verify database wipe works
|
|
|
|
**Steps:**
|
|
1. Ensure mtc-pharmacy-web container is running
|
|
2. Run setup
|
|
3. Verify db:wipe command executes
|
|
|
|
**Expected:** Database wiped successfully
|
|
|
|
**Edge cases:**
|
|
- Container not running → Pause with instructions
|
|
|
|
---
|
|
|
|
### 17. db-sync
|
|
**Purpose:** Verify make db-sync runs
|
|
|
|
**Steps:**
|
|
1. Ensure Makefile exists with db-sync target
|
|
2. Ensure .env.prod.local has correct values
|
|
3. Run setup
|
|
|
|
**Expected:** Database synced from staging
|
|
|
|
**Edge cases:**
|
|
- Makefile missing → Error from make
|
|
- db-sync target missing → Error from make
|
|
- Connection fails → Pause with instructions
|
|
|
|
---
|
|
|
|
## Edge Cases Summary
|
|
|
|
| Scenario | Expected Behavior |
|
|
|----------|-------------------|
|
|
| Clone fails (wrong credentials) | Red error, exit |
|
|
| Clone fails (repo doesn't exist) | Red error, exit |
|
|
| .npmrc missing | Yellow pause, wait for user |
|
|
| .docker/config/.env.local missing | Red error, pause, retry |
|
|
| No Docker containers/volumes | Commands succeed silently |
|
|
| docker-setup.sh missing | Yellow pause, notify user |
|
|
| Server .env missing | Red error, pause, retry |
|
|
| .server.env malformed | get_env_value returns empty, yellow warning |
|
|
| ~/.ssh doesn't exist on server | Create directory (Case C) |
|
|
| authorized_keys doesn't exist | Create with public key |
|
|
| staging.key assume-unchanged fails | Suppress error, continue |
|
|
| ssh-agent not running | Yellow warning, instructions, pause |
|
|
| Docker container not running | Yellow warning, pause, retry |
|
|
| make db-sync fails | Yellow warning, pause |
|
|
|
|
## Manual Verification Checklist
|
|
|
|
- [ ] Clone test passes
|
|
- [ ] .npmrc check pauses correctly
|
|
- [ ] Docker env copied
|
|
- [ ] Docker volumes cleaned
|
|
- [ ] docker-setup.sh runs or notifies
|
|
- [ ] Server .env copied to .server.env
|
|
- [ ] .server.env marked assume-unchanged
|
|
- [ ] APP_NAME/APP_KEY extracted and set
|
|
- [ ] .env.prod.local has all 5 variables
|
|
- [ ] ssh.sh created with correct variables
|
|
- [ ] ssh.sh in .gitignore
|
|
- [ ] staging.key in .gitignore
|
|
- [ ] lazygit uploaded and assume-unchanged
|
|
- [ ] SSH key management works (test appropriate case)
|
|
- [ ] staging.key marked assume-unchanged
|
|
- [ ] ssh-add succeeds
|
|
- [ ] db:wipe runs
|
|
- [ ] db-sync runs
|
|
|
|
## Cleanup After Testing
|
|
|
|
```bash
|
|
# Remove test project locally
|
|
rm -rf LOCAL_FOLDER
|
|
|
|
# On server, if you modified SSH keys:
|
|
# Restore original keys or regenerate
|
|
|
|
# Remove any test databases
|
|
```
|