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
|
# This file is a part of Julia. License is MIT: https://julialang.org/license
module LibGit2OnlineTests
using Test
import LibGit2
using Random
function transfer_progress(progress::Ptr{LibGit2.TransferProgress}, payload::Dict)
status = payload[:transfer_progress]
progress = unsafe_load(progress)
status[] = (current=progress.received_objects, total=progress.total_objects)
return Cint(0)
end
#########
# TESTS #
#########
# init & clone
mktempdir() do dir
repo_url = "https://github.com/JuliaLang/Example.jl"
@testset "Cloning repository" begin
@testset "HTTPS protocol" begin
repo_path = joinpath(dir, "Example.HTTPS")
c = LibGit2.CredentialPayload(allow_prompt=false, allow_git_helpers=false)
repo = LibGit2.clone(repo_url, repo_path, credentials=c)
try
@test isdir(repo_path)
@test isdir(joinpath(repo_path, ".git"))
finally
close(repo)
end
end
@testset "Transfer progress callbacks" begin
status = Ref((current=0, total=-1))
callbacks = LibGit2.Callbacks(
:transfer_progress => (
@cfunction(transfer_progress, Cint, (Ptr{LibGit2.TransferProgress}, Any)),
status,
)
)
repo_path = joinpath(dir, "Example.TransferProgress")
c = LibGit2.CredentialPayload(allow_prompt=false, allow_git_helpers=false)
repo = LibGit2.clone(repo_url, repo_path, credentials=c, callbacks=callbacks)
try
@test isdir(repo_path)
@test isdir(joinpath(repo_path, ".git"))
@test status[].total >= 0
@test status[].current == status[].total
finally
close(repo)
end
end
@testset "Incorrect URL" begin
repo_path = joinpath(dir, "Example.IncorrectURL")
# credentials are required because github tries to authenticate on unknown repo
cred = LibGit2.UserPasswordCredential("JeffBezanson", "hunter2") # make sure Jeff is using a good password :)
c = LibGit2.CredentialPayload(cred, allow_prompt=false, allow_git_helpers=false)
try
LibGit2.clone(repo_url*randstring(10), repo_path, credentials=c)
error("unexpected")
catch ex
@test isa(ex, LibGit2.Error.GitError)
@test ex.code == LibGit2.Error.EAUTH
end
Base.shred!(cred)
end
@testset "Empty Credentials" begin
repo_path = joinpath(dir, "Example.EmptyCredentials")
# credentials are required because github tries to authenticate on unknown repo
cred = LibGit2.UserPasswordCredential("","") # empty credentials cause authentication error
c = LibGit2.CredentialPayload(cred, allow_prompt=false, allow_git_helpers=false)
try
LibGit2.clone(repo_url*randstring(10), repo_path, credentials=c)
error("unexpected")
catch ex
@test isa(ex, LibGit2.Error.GitError)
@test ex.code == LibGit2.Error.EAUTH
end
end
end
end
end # module
|