mirror of
				https://github.com/go-gitea/gitea
				synced 2025-10-26 17:08:25 +00:00 
			
		
		
		
	* repository deletion, delete ephemeral runners with active tasks as well skips regular cleanup * user deletion, delete ephemeral runners with active tasks as well skips regular cleanup * delete ephemeral runners once status changes to done * You no longer see used ephemeral runners after the task is done * if you see one the cron job takes care of it
		
			
				
	
	
		
			80 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Copyright 2025 The Gitea Authors. All rights reserved.
 | |
| // SPDX-License-Identifier: MIT
 | |
| 
 | |
| package integration
 | |
| 
 | |
| import (
 | |
| 	"testing"
 | |
| 
 | |
| 	actions_model "code.gitea.io/gitea/models/actions"
 | |
| 	"code.gitea.io/gitea/models/unittest"
 | |
| 	user_model "code.gitea.io/gitea/models/user"
 | |
| 	"code.gitea.io/gitea/modules/util"
 | |
| 	repo_service "code.gitea.io/gitea/services/repository"
 | |
| 	user_service "code.gitea.io/gitea/services/user"
 | |
| 	"code.gitea.io/gitea/tests"
 | |
| 
 | |
| 	"github.com/stretchr/testify/assert"
 | |
| )
 | |
| 
 | |
| func TestEphemeralActionsRunnerDeletion(t *testing.T) {
 | |
| 	t.Run("ByTaskCompletion", testEphemeralActionsRunnerDeletionByTaskCompletion)
 | |
| 	t.Run("ByRepository", testEphemeralActionsRunnerDeletionByRepository)
 | |
| 	t.Run("ByUser", testEphemeralActionsRunnerDeletionByUser)
 | |
| }
 | |
| 
 | |
| // Test that the ephemeral runner is deleted when the task is finished
 | |
| func testEphemeralActionsRunnerDeletionByTaskCompletion(t *testing.T) {
 | |
| 	defer tests.PrepareTestEnv(t)()
 | |
| 
 | |
| 	_, err := actions_model.GetRunnerByID(t.Context(), 34350)
 | |
| 	assert.NoError(t, err)
 | |
| 
 | |
| 	task := unittest.AssertExistsAndLoadBean(t, &actions_model.ActionTask{ID: 52})
 | |
| 	assert.Equal(t, actions_model.StatusRunning, task.Status)
 | |
| 
 | |
| 	task.Status = actions_model.StatusSuccess
 | |
| 	err = actions_model.UpdateTask(t.Context(), task, "status")
 | |
| 	assert.NoError(t, err)
 | |
| 
 | |
| 	_, err = actions_model.GetRunnerByID(t.Context(), 34350)
 | |
| 	assert.ErrorIs(t, err, util.ErrNotExist)
 | |
| }
 | |
| 
 | |
| func testEphemeralActionsRunnerDeletionByRepository(t *testing.T) {
 | |
| 	defer tests.PrepareTestEnv(t)()
 | |
| 
 | |
| 	_, err := actions_model.GetRunnerByID(t.Context(), 34350)
 | |
| 	assert.NoError(t, err)
 | |
| 
 | |
| 	task := unittest.AssertExistsAndLoadBean(t, &actions_model.ActionTask{ID: 52})
 | |
| 	assert.Equal(t, actions_model.StatusRunning, task.Status)
 | |
| 
 | |
| 	user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
 | |
| 
 | |
| 	err = repo_service.DeleteRepositoryDirectly(t.Context(), user, task.RepoID, true)
 | |
| 	assert.NoError(t, err)
 | |
| 
 | |
| 	_, err = actions_model.GetRunnerByID(t.Context(), 34350)
 | |
| 	assert.ErrorIs(t, err, util.ErrNotExist)
 | |
| }
 | |
| 
 | |
| // Test that the ephemeral runner is deleted when a user is deleted
 | |
| func testEphemeralActionsRunnerDeletionByUser(t *testing.T) {
 | |
| 	defer tests.PrepareTestEnv(t)()
 | |
| 
 | |
| 	_, err := actions_model.GetRunnerByID(t.Context(), 34350)
 | |
| 	assert.NoError(t, err)
 | |
| 
 | |
| 	task := unittest.AssertExistsAndLoadBean(t, &actions_model.ActionTask{ID: 52})
 | |
| 	assert.Equal(t, actions_model.StatusRunning, task.Status)
 | |
| 
 | |
| 	user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
 | |
| 
 | |
| 	err = user_service.DeleteUser(t.Context(), user, true)
 | |
| 	assert.NoError(t, err)
 | |
| 
 | |
| 	_, err = actions_model.GetRunnerByID(t.Context(), 34350)
 | |
| 	assert.ErrorIs(t, err, util.ErrNotExist)
 | |
| }
 |