Skip to content

Commit 1330d5d

Browse files
authored
Merge pull request #2 from OpenVoxProject/run-unit-tests
Run unit tests on push
2 parents 9c5d16c + bc1c1df commit 1330d5d

9 files changed

Lines changed: 105 additions & 15 deletions

File tree

.github/workflows/unit_tests.yaml

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
---
2+
name: Unit tests
3+
4+
on:
5+
push:
6+
branches:
7+
- main
8+
pull_request:
9+
branches:
10+
- main
11+
12+
# minimal permissions
13+
permissions:
14+
contents: read
15+
16+
env:
17+
CI: true
18+
19+
jobs:
20+
linux_unit_tests:
21+
name: Ruby version
22+
strategy:
23+
fail-fast: false
24+
matrix:
25+
ruby:
26+
- '2.7'
27+
- '3.0'
28+
- '3.2'
29+
- '3.3'
30+
runs-on: ubuntu-24.04
31+
steps:
32+
- name: Checkout current PR
33+
uses: actions/checkout@v4
34+
35+
- name: Rspec checks
36+
uses: ruby/setup-ruby@v1
37+
with:
38+
ruby-version: ${{ matrix.ruby }}
39+
bundler-cache: true
40+
41+
- name: Display bundle environment
42+
run: |
43+
bundle env
44+
45+
- run: bundle exec rake spec_random

.rspec

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,2 @@
1-
--format documentation
21
--color
32
--require spec_helper

Rakefile

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
require "bundler/gem_tasks"
2-
require "rspec/core/rake_task"
32

4-
RSpec::Core::RakeTask.new(:spec)
3+
Dir.glob(File.join('tasks/**/*.rake')).each { |file| load file }
54

6-
task :default => :spec
5+
task default: :spec

lib/puppetserver/ca/action/prune.rb

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -136,12 +136,27 @@ def prune_CRL(crl)
136136
end
137137

138138
def update_pruned_CRL(crl, pkey)
139-
number_ext, other_ext = crl.extensions.partition{ |ext| ext.oid == "crlNumber" }
140-
number_ext.each do |crl_number|
141-
updated_crl_number = OpenSSL::BN.new(crl_number.value) + OpenSSL::BN.new(1)
142-
crl_number.value=(OpenSSL::ASN1::Integer(updated_crl_number))
139+
# Updating extensions in-place does not work with some ruby versions / implementation. Copy & recreate them.
140+
extensions = crl.extensions
141+
crl.extensions = []
142+
143+
ef = OpenSSL::X509::ExtensionFactory.new
144+
ef.crl = crl
145+
146+
extensions.each do |ext|
147+
if ext.oid == "crlNumber"
148+
if RUBY_ENGINE == "jruby"
149+
# Creating a crlNumber extension without an ExtensionFactory produce incorrect result on jruby
150+
crl.add_extension(ef.create_extension("crlNumber", ext.value.next))
151+
else
152+
# Creating a crlNumber extension with an ExtensionFactory rais on exception on MRI
153+
crl.add_extension(OpenSSL::X509::Extension.new("crlNumber", ext.value.next))
154+
end
155+
else
156+
crl.add_extension(ext)
157+
end
143158
end
144-
crl.extensions=(number_ext + other_ext)
159+
145160
crl.sign(pkey, OpenSSL::Digest::SHA256.new)
146161
end
147162

lib/puppetserver/ca/host.rb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,6 @@ def create_csr(name:, key:, cli_extensions: [], csr_attributes_path: '')
8080
csr = OpenSSL::X509::Request.new
8181
csr.public_key = key.public_key
8282
csr.subject = OpenSSL::X509::Name.new([["CN", name]])
83-
csr.version = 2
8483

8584
custom_attributes = get_custom_attributes(csr_attributes_path)
8685
extension_requests = get_extension_requests(csr_attributes_path)

lib/puppetserver/ca/local_certificate_authority.rb

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ class LocalCertificateAuthority
1515
# before the user expected it to when they asked for "one year".
1616
CERT_VALID_FROM = (Time.now - (60*60*24)).freeze
1717

18-
SSL_SERVER_CERT = "1.3.6.1.5.5.7.3.1"
19-
SSL_CLIENT_CERT = "1.3.6.1.5.5.7.3.2"
18+
SSL_SERVER_CERT = "serverAuth"
19+
SSL_CLIENT_CERT = "clientAuth"
2020

2121
CLI_AUTH_EXT_OID = "1.3.6.1.4.1.34380.1.3.39"
2222

@@ -252,6 +252,15 @@ def create_crl_for(cert, key)
252252
crl.next_update = valid_until
253253
crl.sign(key, @digest)
254254

255+
# FIXME: Workaround a bug in jruby-openssl. Without this, #to_pem return an invalid CRL:
256+
# ----BEGIN X509 CRL-----
257+
# MAA=
258+
# -----END X509 CRL-----
259+
# See:
260+
# https://github.com/jruby/jruby-openssl/issues/163
261+
# https://github.com/jruby/jruby-openssl/pull/333
262+
crl = OpenSSL::X509::CRL.new(crl.to_der)
263+
255264
crl
256265
end
257266

spec/puppetserver/ca/action/sign_spec.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,9 @@
6565
let(:get_success) { response.new('200', 'Stuff') }
6666
let(:not_found) { response.new('404', 'Not Found') }
6767
let(:empty) { response.new('404', '[]') }
68-
let(:status_url) { Puppetserver::Ca::Utils::HttpClient::URL.new('https','localhost','8140','status','v1','services') }
69-
let(:bulk_sign_url) { Puppetserver::Ca::Utils::HttpClient::URL.new('https','localhost','8140','puppet-ca','v1','sign', nil, {}) }
70-
let(:bulk_sign_all_url) { Puppetserver::Ca::Utils::HttpClient::URL.new('https','localhost','8140','puppet-ca','v1','sign','all', {}) }
68+
let(:status_url) { Puppetserver::Ca::Utils::HttpClient::URL.new('https','puppet','8140','status','v1','services') }
69+
let(:bulk_sign_url) { Puppetserver::Ca::Utils::HttpClient::URL.new('https','puppet','8140','puppet-ca','v1','sign', nil, {}) }
70+
let(:bulk_sign_all_url) { Puppetserver::Ca::Utils::HttpClient::URL.new('https','puppet','8140','puppet-ca','v1','sign','all', {}) }
7171
let(:status_old_server) { response.new('200', '{"ca":{"service_version":"7.4.1"}}') }
7272
let(:status_new_server) { response.new('200', '{"ca":{"service_version":"8.4.1"}}') }
7373
let(:connection) { double }

spec/utils/ssl.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,15 @@ def create_crl(cert, key, certs_to_revoke = [])
6565
crl.next_update = Time.now + 360000
6666
crl.sign(key, OpenSSL::Digest::SHA256.new)
6767

68+
# FIXME: Workaround a bug in jruby-openssl. Without this, #to_pem return an invalid CRL:
69+
# ----BEGIN X509 CRL-----
70+
# MAA=
71+
# -----END X509 CRL-----
72+
# See:
73+
# https://github.com/jruby/jruby-openssl/issues/163
74+
# https://github.com/jruby/jruby-openssl/pull/333
75+
crl = OpenSSL::X509::CRL.new(crl.to_der)
76+
6877
return crl
6978
end
7079

tasks/spec.rake

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# frozen_string_literal: true
2+
3+
begin
4+
require 'rspec/core/rake_task'
5+
6+
desc 'Run rspec test in sequential order'
7+
RSpec::Core::RakeTask.new(:spec)
8+
9+
desc 'Run rspec test in random order'
10+
RSpec::Core::RakeTask.new(:spec_random) do |t|
11+
t.rspec_opts = '--order random'
12+
end
13+
rescue LoadError
14+
puts 'Could not load rspec'
15+
end

0 commit comments

Comments
 (0)