| 
									
										
										
										
											2015-08-09 15:02:29 +03:00
										 |  |  | require "testing_env" | 
					
						
							|  |  |  | require "migrator" | 
					
						
							| 
									
										
										
										
											2016-10-24 22:53:25 +02:00
										 |  |  | require "test/support/fixtures/testball" | 
					
						
							| 
									
										
										
										
											2015-08-09 15:02:29 +03:00
										 |  |  | require "tab" | 
					
						
							|  |  |  | require "keg" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Formula | 
					
						
							| 
									
										
										
										
											2016-08-05 22:04:59 -07:00
										 |  |  |   attr_writer :oldname | 
					
						
							| 
									
										
										
										
											2015-08-09 15:02:29 +03:00
										 |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class MigratorErrorsTests < Homebrew::TestCase | 
					
						
							|  |  |  |   def setup | 
					
						
							|  |  |  |     @new_f = Testball.new("newname") | 
					
						
							| 
									
										
										
										
											2016-08-05 22:04:59 -07:00
										 |  |  |     @new_f.oldname = "oldname" | 
					
						
							| 
									
										
										
										
											2015-08-09 15:02:29 +03:00
										 |  |  |     @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" | 
					
						
							| 
									
										
										
										
											2016-05-01 14:59:39 +02:00
										 |  |  |     tab.source["tap"] = "homebrew/core" | 
					
						
							| 
									
										
										
										
											2015-08-09 15:02:29 +03:00
										 |  |  |     tab.write | 
					
						
							|  |  |  |     assert_raises(Migrator::MigratorDifferentTapsError) { Migrator.new(@new_f) } | 
					
						
							|  |  |  |   ensure | 
					
						
							|  |  |  |     keg.parent.rmtree | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class MigratorTests < Homebrew::TestCase | 
					
						
							|  |  |  |   include FileUtils | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def setup | 
					
						
							|  |  |  |     @new_f = Testball.new("newname") | 
					
						
							| 
									
										
										
										
											2016-08-05 22:04:59 -07:00
										 |  |  |     @new_f.oldname = "oldname" | 
					
						
							| 
									
										
										
										
											2015-08-09 15:02:29 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |     @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 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-15 18:28:42 +01:00
										 |  |  |     @old_pin = HOMEBREW_PINNED_KEGS/"oldname" | 
					
						
							| 
									
										
										
										
											2015-08-09 15:02:29 +03:00
										 |  |  |     @old_pin.make_relative_symlink @old_keg_record | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @migrator = Migrator.new(@new_f) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     mkpath HOMEBREW_PREFIX/"bin" | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def teardown | 
					
						
							|  |  |  |     @old_pin.unlink if @old_pin.symlink? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if @old_keg_record.parent.symlink? | 
					
						
							|  |  |  |       @old_keg_record.parent.unlink | 
					
						
							|  |  |  |     elsif @old_keg_record.directory? | 
					
						
							|  |  |  |       @keg.unlink | 
					
						
							|  |  |  |       @keg.uninstall | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if @new_keg_record.directory? | 
					
						
							|  |  |  |       new_keg = Keg.new(@new_keg_record) | 
					
						
							|  |  |  |       new_keg.unlink | 
					
						
							|  |  |  |       new_keg.uninstall | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @old_keg_record.parent.rmtree if @old_keg_record.parent.directory? | 
					
						
							|  |  |  |     @new_keg_record.parent.rmtree if @new_keg_record.parent.directory? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     rmtree HOMEBREW_PREFIX/"bin" | 
					
						
							|  |  |  |     rmtree HOMEBREW_PREFIX/"opt" if (HOMEBREW_PREFIX/"opt").directory? | 
					
						
							|  |  |  |     # What to do with pin? | 
					
						
							|  |  |  |     @new_f.unpin | 
					
						
							| 
									
										
										
										
											2015-08-18 15:45:46 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-15 18:28:42 +01:00
										 |  |  |     HOMEBREW_LOCK_DIR.children.each(&:unlink) | 
					
						
							| 
									
										
										
										
											2015-08-09 15:02:29 +03:00
										 |  |  |   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 | 
					
						
							| 
									
										
										
										
											2016-09-15 18:28:42 +01:00
										 |  |  |     expected_relative = @new_keg_record.relative_path_from HOMEBREW_PINNED_KEGS | 
					
						
							| 
									
										
										
										
											2015-08-09 15:02:29 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |     @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 | 
					
						
							| 
									
										
										
										
											2016-09-15 18:28:42 +01:00
										 |  |  |     assert_equal 1, HOMEBREW_LINKED_KEGS.children.size | 
					
						
							|  |  |  |     assert_equal 1, (HOMEBREW_PREFIX/"opt").children.size | 
					
						
							| 
									
										
										
										
											2015-08-09 15:02:29 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |     shutup { @migrator.unlink_oldname } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-15 18:28:42 +01:00
										 |  |  |     refute_predicate HOMEBREW_LINKED_KEGS, :exist? | 
					
						
							|  |  |  |     refute_predicate HOMEBREW_LIBRARY/"bin", :exist? | 
					
						
							| 
									
										
										
										
											2015-08-09 15:02:29 +03:00
										 |  |  |   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 } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-15 18:28:42 +01:00
										 |  |  |     assert_equal 1, HOMEBREW_LINKED_KEGS.children.size | 
					
						
							|  |  |  |     assert_equal 1, (HOMEBREW_PREFIX/"opt").children.size | 
					
						
							| 
									
										
										
										
											2015-08-09 15:02:29 +03:00
										 |  |  |   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? | 
					
						
							| 
									
										
										
										
											2016-09-15 18:28:42 +01:00
										 |  |  |     refute_predicate HOMEBREW_LINKED_KEGS/"oldname", :exist? | 
					
						
							|  |  |  |     assert_equal @new_keg_record.realpath, (HOMEBREW_LINKED_KEGS/"newname").realpath | 
					
						
							| 
									
										
										
										
											2015-08-09 15:02:29 +03:00
										 |  |  |     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 | 
					
						
							| 
									
										
										
										
											2016-09-15 18:28:42 +01:00
										 |  |  |     assert_equal @new_keg_record.realpath, (HOMEBREW_PINNED_KEGS/"newname").realpath | 
					
						
							| 
									
										
										
										
											2015-08-09 15:02:29 +03:00
										 |  |  |     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? | 
					
						
							| 
									
										
										
										
											2016-09-15 18:28:42 +01:00
										 |  |  |     assert_predicate HOMEBREW_LINKED_KEGS/"oldname", :exist? | 
					
						
							| 
									
										
										
										
											2015-08-09 15:02:29 +03:00
										 |  |  |     assert_predicate HOMEBREW_PREFIX/"opt/oldname", :exist? | 
					
						
							| 
									
										
										
										
											2016-09-15 18:28:42 +01:00
										 |  |  |     assert_predicate HOMEBREW_PINNED_KEGS/"oldname", :symlink? | 
					
						
							| 
									
										
										
										
											2015-08-09 15:02:29 +03:00
										 |  |  |     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 |