Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
B
brew
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to JiHu GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
KMSCAKKSCFKA AKFACAMADCAS
brew
Commits
69f36108
Commit
69f36108
authored
8 years ago
by
Markus Reiter
Browse files
Options
Downloads
Patches
Plain Diff
Convert Migrator test to spec.
parent
f8d49dbe
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
Library/Homebrew/test/migrator_spec.rb
+264
-0
264 additions, 0 deletions
Library/Homebrew/test/migrator_spec.rb
Library/Homebrew/test/migrator_test.rb
+0
-251
0 additions, 251 deletions
Library/Homebrew/test/migrator_test.rb
with
264 additions
and
251 deletions
Library/Homebrew/test/migrator_spec.rb
0 → 100644
+
264
−
0
View file @
69f36108
require
"migrator"
require
"test/support/fixtures/testball"
require
"tab"
require
"keg"
describe
Migrator
do
subject
{
described_class
.
new
(
new_formula
)
}
let
(
:new_formula
)
{
Testball
.
new
(
"newname"
)
}
let
(
:old_formula
)
{
Testball
.
new
(
"oldname"
)
}
let
(
:new_keg_record
)
{
HOMEBREW_CELLAR
/
"newname/0.1"
}
let
(
:old_keg_record
)
{
HOMEBREW_CELLAR
/
"oldname/0.1"
}
let
(
:old_tab
)
{
Tab
.
empty
}
let
(
:keg
)
{
Keg
.
new
(
old_keg_record
)
}
let
(
:old_pin
)
{
HOMEBREW_PINNED_KEGS
/
"oldname"
}
before
(
:each
)
do
|
example
|
allow
(
new_formula
).
to
receive
(
:oldname
).
and_return
(
"oldname"
)
# do not create directories for error tests
next
if
example
.
metadata
[
:description
].
start_with?
(
"raises an error"
)
(
old_keg_record
/
"bin"
).
mkpath
%w[inside bindir]
.
each
do
|
file
|
FileUtils
.
touch
old_keg_record
/
"bin/
#{
file
}
"
end
old_tab
.
tabfile
=
HOMEBREW_CELLAR
/
"oldname/0.1/INSTALL_RECEIPT.json"
old_tab
.
source
[
"path"
]
=
"/oldname"
old_tab
.
write
keg
.
link
keg
.
optlink
old_pin
.
make_relative_symlink
old_keg_record
subject
# needs to be evaluated eagerly
(
HOMEBREW_PREFIX
/
"bin"
).
mkpath
end
after
(
:each
)
do
if
!
old_keg_record
.
parent
.
symlink?
&&
old_keg_record
.
directory?
keg
.
unlink
end
if
new_keg_record
.
directory?
new_keg
=
Keg
.
new
(
new_keg_record
)
new_keg
.
unlink
end
end
describe
"::new"
do
it
"raises an error if there is no old name"
do
expect
{
described_class
.
new
(
old_formula
)
}.
to
raise_error
(
Migrator
::
MigratorNoOldnameError
)
end
it
"raises an error if there is no old path"
do
expect
{
described_class
.
new
(
new_formula
)
}.
to
raise_error
(
Migrator
::
MigratorNoOldpathError
)
end
it
"raises an error if the Taps differ"
do
keg
=
HOMEBREW_CELLAR
/
"oldname/0.1"
keg
.
mkpath
tab
=
Tab
.
empty
tab
.
tabfile
=
HOMEBREW_CELLAR
/
"oldname/0.1/INSTALL_RECEIPT.json"
tab
.
source
[
"tap"
]
=
"homebrew/core"
tab
.
write
expect
{
described_class
.
new
(
new_formula
)
}.
to
raise_error
(
Migrator
::
MigratorDifferentTapsError
)
end
end
specify
"#move_to_new_directory"
do
keg
.
unlink
shutup
do
subject
.
move_to_new_directory
end
expect
(
new_keg_record
).
to
be_a_directory
expect
(
new_keg_record
/
"bin"
).
to
be_a_directory
expect
(
new_keg_record
/
"bin/inside"
).
to
be_a_file
expect
(
new_keg_record
/
"bin/bindir"
).
to
be_a_file
expect
(
old_keg_record
).
not_to
be_a_directory
end
specify
"#backup_oldname_cellar"
do
old_keg_record
.
parent
.
rmtree
(
new_keg_record
/
"bin"
).
mkpath
subject
.
backup_oldname_cellar
expect
(
old_keg_record
/
"bin"
).
to
be_a_directory
expect
(
old_keg_record
/
"bin"
).
to
be_a_directory
end
specify
"#repin"
do
(
new_keg_record
/
"bin"
).
mkpath
expected_relative
=
new_keg_record
.
relative_path_from
HOMEBREW_PINNED_KEGS
subject
.
repin
expect
(
subject
.
new_pin_record
).
to
be_a_symlink
expect
(
subject
.
new_pin_record
.
readlink
).
to
eq
(
expected_relative
)
expect
(
subject
.
old_pin_record
).
not_to
exist
end
specify
"#unlink_oldname"
do
expect
(
HOMEBREW_LINKED_KEGS
.
children
.
count
).
to
eq
(
1
)
expect
((
HOMEBREW_PREFIX
/
"opt"
).
children
.
count
).
to
eq
(
1
)
shutup
do
subject
.
unlink_oldname
end
expect
(
HOMEBREW_LINKED_KEGS
).
not_to
exist
expect
(
HOMEBREW_LIBRARY
/
"bin"
).
not_to
exist
end
specify
"#link_newname"
do
keg
.
unlink
keg
.
uninstall
(
new_keg_record
/
"bin"
).
mkpath
%w[inside bindir]
.
each
do
|
file
|
FileUtils
.
touch
new_keg_record
/
"bin"
/
file
end
shutup
do
subject
.
link_newname
end
expect
(
HOMEBREW_LINKED_KEGS
.
children
.
count
).
to
eq
(
1
)
expect
((
HOMEBREW_PREFIX
/
"opt"
).
children
.
count
).
to
eq
(
1
)
end
specify
"#link_oldname_opt"
do
new_keg_record
.
mkpath
subject
.
link_oldname_opt
expect
((
HOMEBREW_PREFIX
/
"opt/oldname"
).
realpath
).
to
eq
(
new_keg_record
.
realpath
)
end
specify
"#link_oldname_cellar"
do
(
new_keg_record
/
"bin"
).
mkpath
keg
.
unlink
keg
.
uninstall
subject
.
link_oldname_cellar
expect
((
HOMEBREW_CELLAR
/
"oldname"
).
realpath
).
to
eq
(
new_keg_record
.
parent
.
realpath
)
end
specify
"#update_tabs"
do
(
new_keg_record
/
"bin"
).
mkpath
tab
=
Tab
.
empty
tab
.
tabfile
=
HOMEBREW_CELLAR
/
"newname/0.1/INSTALL_RECEIPT.json"
tab
.
source
[
"path"
]
=
"/path/that/must/be/changed/by/update_tabs"
tab
.
write
subject
.
update_tabs
expect
(
Tab
.
for_keg
(
new_keg_record
).
source
[
"path"
]).
to
eq
(
new_formula
.
path
.
to_s
)
end
specify
"#migrate"
do
tab
=
Tab
.
empty
tab
.
tabfile
=
HOMEBREW_CELLAR
/
"oldname/0.1/INSTALL_RECEIPT.json"
tab
.
source
[
"path"
]
=
old_formula
.
path
.
to_s
tab
.
write
shutup
do
subject
.
migrate
end
expect
(
new_keg_record
).
to
exist
expect
(
old_keg_record
.
parent
).
to
be_a_symlink
expect
(
HOMEBREW_LINKED_KEGS
/
"oldname"
).
not_to
exist
expect
((
HOMEBREW_LINKED_KEGS
/
"newname"
).
realpath
).
to
eq
(
new_keg_record
.
realpath
)
expect
(
old_keg_record
.
realpath
).
to
eq
(
new_keg_record
.
realpath
)
expect
((
HOMEBREW_PREFIX
/
"opt/oldname"
).
realpath
).
to
eq
(
new_keg_record
.
realpath
)
expect
((
HOMEBREW_CELLAR
/
"oldname"
).
realpath
).
to
eq
(
new_keg_record
.
parent
.
realpath
)
expect
((
HOMEBREW_PINNED_KEGS
/
"newname"
).
realpath
).
to
eq
(
new_keg_record
.
realpath
)
expect
(
Tab
.
for_keg
(
new_keg_record
).
source
[
"path"
]).
to
eq
(
new_formula
.
path
.
to_s
)
end
specify
"#unlinik_oldname_opt"
do
new_keg_record
.
mkpath
old_opt_record
=
HOMEBREW_PREFIX
/
"opt/oldname"
old_opt_record
.
unlink
if
old_opt_record
.
symlink?
old_opt_record
.
make_relative_symlink
(
new_keg_record
)
subject
.
unlink_oldname_opt
expect
(
old_opt_record
).
not_to
be_a_symlink
end
specify
"#unlink_oldname_cellar"
do
new_keg_record
.
mkpath
keg
.
unlink
keg
.
uninstall
old_keg_record
.
parent
.
make_relative_symlink
(
new_keg_record
.
parent
)
subject
.
unlink_oldname_cellar
expect
(
old_keg_record
.
parent
).
not_to
be_a_symlink
end
specify
"#backup_oldname_cellar"
do
(
new_keg_record
/
"bin"
).
mkpath
keg
.
unlink
keg
.
uninstall
subject
.
backup_oldname_cellar
expect
(
old_keg_record
.
subdirs
).
not_to
be_empty
end
specify
"#backup_old_tabs"
do
tab
=
Tab
.
empty
tab
.
tabfile
=
HOMEBREW_CELLAR
/
"oldname/0.1/INSTALL_RECEIPT.json"
tab
.
source
[
"path"
]
=
"/should/be/the/same"
tab
.
write
migrator
=
Migrator
.
new
(
new_formula
)
tab
.
tabfile
.
delete
migrator
.
backup_old_tabs
expect
(
Tab
.
for_keg
(
old_keg_record
).
source
[
"path"
]).
to
eq
(
"/should/be/the/same"
)
end
describe
"#backup_oldname"
do
after
(
:each
)
do
expect
(
old_keg_record
.
parent
).
to
be_a_directory
expect
(
old_keg_record
.
parent
.
subdirs
).
not_to
be_empty
expect
(
HOMEBREW_LINKED_KEGS
/
"oldname"
).
to
exist
expect
(
HOMEBREW_PREFIX
/
"opt/oldname"
).
to
exist
expect
(
HOMEBREW_PINNED_KEGS
/
"oldname"
).
to
be_a_symlink
expect
(
keg
).
to
be_linked
end
context
"when cellar exists"
do
it
"backs up the old name"
do
subject
.
backup_oldname
end
end
context
"when cellar is removed"
do
it
"backs up the old name"
do
(
new_keg_record
/
"bin"
).
mkpath
keg
.
unlink
keg
.
uninstall
subject
.
backup_oldname
end
end
context
"when cellar is linked"
do
it
"backs up the old name"
do
(
new_keg_record
/
"bin"
).
mkpath
keg
.
unlink
keg
.
uninstall
old_keg_record
.
parent
.
make_relative_symlink
(
new_keg_record
.
parent
)
subject
.
backup_oldname
end
end
end
end
This diff is collapsed.
Click to expand it.
Library/Homebrew/test/migrator_test.rb
deleted
100644 → 0
+
0
−
251
View file @
f8d49dbe
require
"testing_env"
require
"migrator"
require
"test/support/fixtures/testball"
require
"tab"
require
"keg"
class
Formula
attr_writer
:oldname
end
class
MigratorErrorsTests
<
Homebrew
::
TestCase
def
setup
super
@new_f
=
Testball
.
new
(
"newname"
)
@new_f
.
oldname
=
"oldname"
@old_f
=
Testball
.
new
(
"oldname"
)
end
def
test_no_oldname
assert_raises
(
Migrator
::
MigratorNoOldnameError
)
{
Migrator
.
new
(
@old_f
)
}
end
def
test_no_oldpath
assert_raises
(
Migrator
::
MigratorNoOldpathError
)
{
Migrator
.
new
(
@new_f
)
}
end
def
test_different_taps
keg
=
HOMEBREW_CELLAR
/
"oldname/0.1"
keg
.
mkpath
tab
=
Tab
.
empty
tab
.
tabfile
=
HOMEBREW_CELLAR
/
"oldname/0.1/INSTALL_RECEIPT.json"
tab
.
source
[
"tap"
]
=
"homebrew/core"
tab
.
write
assert_raises
(
Migrator
::
MigratorDifferentTapsError
)
{
Migrator
.
new
(
@new_f
)
}
end
end
class
MigratorTests
<
Homebrew
::
TestCase
include
FileUtils
def
setup
super
@new_f
=
Testball
.
new
(
"newname"
)
@new_f
.
oldname
=
"oldname"
@old_f
=
Testball
.
new
(
"oldname"
)
@old_keg_record
=
HOMEBREW_CELLAR
/
"oldname/0.1"
@old_keg_record
.
join
(
"bin"
).
mkpath
@new_keg_record
=
HOMEBREW_CELLAR
/
"newname/0.1"
%w[inside bindir]
.
each
{
|
file
|
touch
@old_keg_record
.
join
(
"bin"
,
file
)
}
@old_tab
=
Tab
.
empty
@old_tab
.
tabfile
=
HOMEBREW_CELLAR
/
"oldname/0.1/INSTALL_RECEIPT.json"
@old_tab
.
source
[
"path"
]
=
"/oldname"
@old_tab
.
write
@keg
=
Keg
.
new
(
@old_keg_record
)
@keg
.
link
@keg
.
optlink
@old_pin
=
HOMEBREW_PINNED_KEGS
/
"oldname"
@old_pin
.
make_relative_symlink
@old_keg_record
@migrator
=
Migrator
.
new
(
@new_f
)
mkpath
HOMEBREW_PREFIX
/
"bin"
end
def
teardown
if
!
@old_keg_record
.
parent
.
symlink?
&&
@old_keg_record
.
directory?
@keg
.
unlink
end
if
@new_keg_record
.
directory?
new_keg
=
Keg
.
new
(
@new_keg_record
)
new_keg
.
unlink
end
super
end
def
test_move_cellar
@keg
.
unlink
shutup
{
@migrator
.
move_to_new_directory
}
assert_predicate
@new_keg_record
,
:directory?
assert_predicate
@new_keg_record
/
"bin"
,
:directory?
assert_predicate
@new_keg_record
/
"bin/inside"
,
:file?
assert_predicate
@new_keg_record
/
"bin/bindir"
,
:file?
refute_predicate
@old_keg_record
,
:directory?
end
def
test_backup_cellar
@old_keg_record
.
parent
.
rmtree
@new_keg_record
.
join
(
"bin"
).
mkpath
@migrator
.
backup_oldname_cellar
assert_predicate
@old_keg_record
,
:directory?
assert_predicate
@old_keg_record
/
"bin"
,
:directory?
end
def
test_repin
@new_keg_record
.
join
(
"bin"
).
mkpath
expected_relative
=
@new_keg_record
.
relative_path_from
HOMEBREW_PINNED_KEGS
@migrator
.
repin
assert_predicate
@migrator
.
new_pin_record
,
:symlink?
assert_equal
expected_relative
,
@migrator
.
new_pin_record
.
readlink
refute_predicate
@migrator
.
old_pin_record
,
:exist?
end
def
test_unlink_oldname
assert_equal
1
,
HOMEBREW_LINKED_KEGS
.
children
.
size
assert_equal
1
,
(
HOMEBREW_PREFIX
/
"opt"
).
children
.
size
shutup
{
@migrator
.
unlink_oldname
}
refute_predicate
HOMEBREW_LINKED_KEGS
,
:exist?
refute_predicate
HOMEBREW_LIBRARY
/
"bin"
,
:exist?
end
def
test_link_newname
@keg
.
unlink
@keg
.
uninstall
@new_keg_record
.
join
(
"bin"
).
mkpath
%w[inside bindir]
.
each
{
|
file
|
touch
@new_keg_record
.
join
(
"bin"
,
file
)
}
shutup
{
@migrator
.
link_newname
}
assert_equal
1
,
HOMEBREW_LINKED_KEGS
.
children
.
size
assert_equal
1
,
(
HOMEBREW_PREFIX
/
"opt"
).
children
.
size
end
def
test_link_oldname_opt
@new_keg_record
.
mkpath
@migrator
.
link_oldname_opt
assert_equal
@new_keg_record
.
realpath
,
(
HOMEBREW_PREFIX
/
"opt/oldname"
).
realpath
end
def
test_link_oldname_cellar
@new_keg_record
.
join
(
"bin"
).
mkpath
@keg
.
unlink
@keg
.
uninstall
@migrator
.
link_oldname_cellar
assert_equal
@new_keg_record
.
parent
.
realpath
,
(
HOMEBREW_CELLAR
/
"oldname"
).
realpath
end
def
test_update_tabs
@new_keg_record
.
join
(
"bin"
).
mkpath
tab
=
Tab
.
empty
tab
.
tabfile
=
HOMEBREW_CELLAR
/
"newname/0.1/INSTALL_RECEIPT.json"
tab
.
source
[
"path"
]
=
"/path/that/must/be/changed/by/update_tabs"
tab
.
write
@migrator
.
update_tabs
assert_equal
@new_f
.
path
.
to_s
,
Tab
.
for_keg
(
@new_keg_record
).
source
[
"path"
]
end
def
test_migrate
tab
=
Tab
.
empty
tab
.
tabfile
=
HOMEBREW_CELLAR
/
"oldname/0.1/INSTALL_RECEIPT.json"
tab
.
source
[
"path"
]
=
@old_f
.
path
.
to_s
tab
.
write
shutup
{
@migrator
.
migrate
}
assert_predicate
@new_keg_record
,
:exist?
assert_predicate
@old_keg_record
.
parent
,
:symlink?
refute_predicate
HOMEBREW_LINKED_KEGS
/
"oldname"
,
:exist?
assert_equal
@new_keg_record
.
realpath
,
(
HOMEBREW_LINKED_KEGS
/
"newname"
).
realpath
assert_equal
@new_keg_record
.
realpath
,
@old_keg_record
.
realpath
assert_equal
@new_keg_record
.
realpath
,
(
HOMEBREW_PREFIX
/
"opt/oldname"
).
realpath
assert_equal
@new_keg_record
.
parent
.
realpath
,
(
HOMEBREW_CELLAR
/
"oldname"
).
realpath
assert_equal
@new_keg_record
.
realpath
,
(
HOMEBREW_PINNED_KEGS
/
"newname"
).
realpath
assert_equal
@new_f
.
path
.
to_s
,
Tab
.
for_keg
(
@new_keg_record
).
source
[
"path"
]
end
def
test_unlinik_oldname_opt
@new_keg_record
.
mkpath
old_opt_record
=
HOMEBREW_PREFIX
/
"opt/oldname"
old_opt_record
.
unlink
if
old_opt_record
.
symlink?
old_opt_record
.
make_relative_symlink
(
@new_keg_record
)
@migrator
.
unlink_oldname_opt
refute_predicate
old_opt_record
,
:symlink?
end
def
test_unlink_oldname_cellar
@new_keg_record
.
mkpath
@keg
.
unlink
@keg
.
uninstall
@old_keg_record
.
parent
.
make_relative_symlink
(
@new_keg_record
.
parent
)
@migrator
.
unlink_oldname_cellar
refute_predicate
@old_keg_record
.
parent
,
:symlink?
end
def
test_backup_oldname_cellar
@new_keg_record
.
join
(
"bin"
).
mkpath
@keg
.
unlink
@keg
.
uninstall
@migrator
.
backup_oldname_cellar
refute_predicate
@old_keg_record
.
subdirs
,
:empty?
end
def
test_backup_old_tabs
tab
=
Tab
.
empty
tab
.
tabfile
=
HOMEBREW_CELLAR
/
"oldname/0.1/INSTALL_RECEIPT.json"
tab
.
source
[
"path"
]
=
"/should/be/the/same"
tab
.
write
migrator
=
Migrator
.
new
(
@new_f
)
tab
.
tabfile
.
delete
migrator
.
backup_old_tabs
assert_equal
"/should/be/the/same"
,
Tab
.
for_keg
(
@old_keg_record
).
source
[
"path"
]
end
# Backup tests are divided into three groups: when oldname Cellar is deleted
# and when it still exists and when it's a symlink
def
check_after_backup
assert_predicate
@old_keg_record
.
parent
,
:directory?
refute_predicate
@old_keg_record
.
parent
.
subdirs
,
:empty?
assert_predicate
HOMEBREW_LINKED_KEGS
/
"oldname"
,
:exist?
assert_predicate
HOMEBREW_PREFIX
/
"opt/oldname"
,
:exist?
assert_predicate
HOMEBREW_PINNED_KEGS
/
"oldname"
,
:symlink?
assert_predicate
@keg
,
:linked?
end
def
test_backup_cellar_exist
@migrator
.
backup_oldname
check_after_backup
end
def
test_backup_cellar_removed
@new_keg_record
.
join
(
"bin"
).
mkpath
@keg
.
unlink
@keg
.
uninstall
@migrator
.
backup_oldname
check_after_backup
end
def
test_backup_cellar_linked
@new_keg_record
.
join
(
"bin"
).
mkpath
@keg
.
unlink
@keg
.
uninstall
@old_keg_record
.
parent
.
make_relative_symlink
(
@new_keg_record
.
parent
)
@migrator
.
backup_oldname
check_after_backup
end
end
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment