diff --git a/slurm.spec b/slurm.spec
index 6ac71c8..debed12 100644
--- a/slurm.spec
+++ b/slurm.spec
@@ -11,8 +11,8 @@
 %undefine _strict_symbol_defs_build
 
 Name:           slurm
-Version:        18.08.7
-Release:        2%{?dist}
+Version:        19.05.0
+Release:        1%{?dist}
 Summary:        Simple Linux Utility for Resource Management
 License:        GPLv2 and BSD
 URL:            https://slurm.schedmd.com/
@@ -25,6 +25,8 @@ Source5:        slurm-setuser.in
 
 # Upstream bug #4449: release-style versioning of libslurmfull
 Patch0:         slurm_libslurmfull_version.patch
+# Upstream bug #7197: fix 19.05.0 testsuite
+Patch1:         slurm_fix_testsuite.patch
 
 # Build-related patches
 Patch10:        slurm_perlapi_rpaths.patch
@@ -64,7 +66,6 @@ BuildRequires:  pkgconfig(lua)
 BuildRequires:  pkgconfig(mariadb)
 BuildRequires:  pkgconfig(munge)
 BuildRequires:  pkgconfig(ncurses)
-BuildRequires:  pkgconfig(openssl)
 BuildRequires:  pkgconfig(pmix) >= 2.0.0
 BuildRequires:  pkgconfig(zlib)
 BuildRequires:  readline-devel
@@ -157,6 +158,15 @@ Slurm contribution package which includes the programs seff,
 sjobexitmod, sjstat and smail.  See their respective man pages
 for more information.
 
+%package nss_slurm
+Summary: NSS plugin for slurm
+Requires: %{name}-libs%{?_isa} = %{version}-%{release}
+%description nss_slurm
+nss_slurm is an optional NSS plugin that can permit passwd and group resolution
+for a job on the compute node to be serviced through the local slurmstepd
+process, rather than through some alternate network-based service such as LDAP,
+SSSD, or NSLCD.
+
 %package openlava
 Summary: Openlava/LSF wrappers for transition from OpenLava/LSF to Slurm
 Requires: %{name}-perlapi%{?_isa} = %{version}-%{release}
@@ -190,6 +200,7 @@ Torque wrapper scripts used for helping migrate from Torque/PBS to Slurm.
 %prep
 %setup -q -n %{name_version}
 %patch0 -p1
+%patch1 -p1
 %patch10 -p1
 %patch11 -p1
 %patch12 -p1
@@ -393,7 +404,7 @@ done
 # contribs docs
 install -d -m 0755 %{buildroot}%{_docdir}/%{name}/contribs/lua
 install -m 0644 contribs/README %{buildroot}%{_docdir}/%{name}/contribs
-install -m 0644 contribs/lua/proctrack.lua %{buildroot}%{_docdir}/%{name}/contribs/lua
+install -m 0644 contribs/lua/*.lua %{buildroot}%{_docdir}/%{name}/contribs/lua
 
 # remove libtool archives
 find %{buildroot} -name \*.a -o -name \*.la | xargs rm -f
@@ -405,18 +416,7 @@ rm -f %{buildroot}%{_libdir}/%{name}/auth_none.so
 rm -f %{buildroot}%{_libdir}/%{name}/job_submit_defaults.so
 rm -f %{buildroot}%{_libdir}/%{name}/job_submit_logging.so
 rm -f %{buildroot}%{_libdir}/%{name}/job_submit_partition.so
-# remove bluegene files
-rm -f %{buildroot}%{_libdir}/%{name}/select_bluegene.so
-rm -f %{buildroot}%{_mandir}/man5/bluegene*
 # remove cray files
-rm -f %{buildroot}%{_libdir}/%{name}/acct_gather_energy_cray.so
-rm -f %{buildroot}%{_libdir}/%{name}/core_spec_cray.so
-rm -f %{buildroot}%{_libdir}/%{name}/job_container_cncu.so
-rm -f %{buildroot}%{_libdir}/%{name}/job_submit_cray.so
-rm -f %{buildroot}%{_libdir}/%{name}/select_alps.so
-rm -f %{buildroot}%{_libdir}/%{name}/select_cray.so
-rm -f %{buildroot}%{_libdir}/%{name}/switch_cray.so
-rm -f %{buildroot}%{_libdir}/%{name}/task_cray.so
 rm -f %{buildroot}%{_mandir}/man5/cray*
 # remove perl cruft
 rm -f %{buildroot}%{perl_vendorarch}/auto/Slurm*/.packlist
@@ -455,11 +455,12 @@ rm -f %{buildroot}%{perl_archlib}/perllocal.pod
 %{_libdir}/%{name}/auth_munge.so
 %{_libdir}/%{name}/burst_buffer_generic.so
 %{_libdir}/%{name}/checkpoint_{none,ompi}.so
+%{_libdir}/%{name}/cli_filter_none.so
 %{_libdir}/%{name}/core_spec_none.so
-%{_libdir}/%{name}/crypto_munge.so
-%{_libdir}/%{name}/crypto_openssl.so
+%{_libdir}/%{name}/cred_{munge,none}.so
 %{_libdir}/%{name}/ext_sensors_none.so
-%{_libdir}/%{name}/gres_{gpu,mic,nic}.so
+%{_libdir}/%{name}/gres_{gpu,mic,mps,nic}.so
+%{_libdir}/%{name}/gpu_generic.so
 %{_libdir}/%{name}/job_container_none.so
 %{_libdir}/%{name}/job_submit_all_partitions.so
 %{_libdir}/%{name}/job_submit_lua.so
@@ -479,7 +480,8 @@ rm -f %{buildroot}%{perl_archlib}/perllocal.pod
 %{_libdir}/%{name}/proctrack_{cgroup,linuxproc,lua,pgid}.so
 %{_libdir}/%{name}/route_{default,topology}.so
 %{_libdir}/%{name}/sched_{backfill,builtin,hold}.so
-%{_libdir}/%{name}/select_{cons_res,linear,serial}.so
+%{_libdir}/%{name}/select_{cons_res,cons_tres,linear,serial}.so
+%{_libdir}/%{name}/site_factor_none.so
 %{_libdir}/%{name}/slurmctld_nonstop.so
 %{_libdir}/%{name}/switch_{generic,none}.so
 %{_libdir}/%{name}/task_{affinity,cgroup,none}.so
@@ -558,7 +560,6 @@ rm -f %{buildroot}%{perl_archlib}/perllocal.pod
 %dir %{_libdir}/%{name}/lib
 %dir %{_modulesdir}/pmi
 %{_libdir}/libslurm.so.*
-%{_libdir}/libslurmdb.so.*
 %{_libdir}/libslurmfull-*.so
 %{_libdir}/%{name}/lib/libpmi*.so.*
 %{_modulesdir}/pmi/*
@@ -615,7 +616,7 @@ rm -f %{buildroot}%{perl_archlib}/perllocal.pod
 %dir %{_docdir}/%{name}/contribs
 %dir %{_docdir}/%{name}/contribs/lua
 %{_docdir}/%{name}/contribs/README
-%{_docdir}/%{name}/contribs/lua/proctrack.lua
+%{_docdir}/%{name}/contribs/lua/*.lua
 %{_bindir}/seff
 %{_bindir}/sgather
 %{_bindir}/sjobexitmod
@@ -625,6 +626,13 @@ rm -f %{buildroot}%{perl_archlib}/perllocal.pod
 %{_mandir}/man1/sjobexitmod.1*
 %{_mandir}/man1/sjstat.1*
 
+# ---------------
+# Slurm-nss_slurm
+# ---------------
+
+%files nss_slurm
+%{_libdir}/libnss_slurm.so.2
+
 # --------------
 # Slurm-openlava
 # --------------
@@ -718,6 +726,14 @@ rm -f %{buildroot}%{perl_archlib}/perllocal.pod
 %systemd_postun_with_restart slurmdbd.service
 
 %changelog
+* Sun Jun 9 2019 Philip Kovacs <pkdevel@yahoo.com> - 19.05.0-1
+- Release of 19.05.0
+- Added nss_plugin subpackage for optional nss plugin
+- Added patch to fix 19.05.0 testsuite
+- Adjusted cray patch to remove all cray, cray_aries plugins
+- Reflect all upstream plugin additions/deletions
+- Remove openssl build dependency
+
 * Thu May 30 2019 Jitka Plesnikova <jplesnik@redhat.com> - 18.08.7-2
 - Perl 5.30 rebuild
 
diff --git a/slurm_do_not_build_cray.patch b/slurm_do_not_build_cray.patch
index 7ec7ecc..8b994dc 100644
--- a/slurm_do_not_build_cray.patch
+++ b/slurm_do_not_build_cray.patch
@@ -1,10 +1,101 @@
 diff --git a/contribs/Makefile.am b/contribs/Makefile.am
-index 24ab9de7cc..087262c347 100644
+index da96aa070d..2a2d1f2c82 100644
 --- a/contribs/Makefile.am
 +++ b/contribs/Makefile.am
 @@ -1,4 +1,4 @@
--SUBDIRS = cray lua mic openlava pam pam_slurm_adopt perlapi pmi pmi2 seff sgather sgi sjobexit torque
-+SUBDIRS = lua mic openlava pam pam_slurm_adopt perlapi pmi pmi2 seff sgather sgi sjobexit torque
+-SUBDIRS = cray lua mic nss_slurm openlava pam pam_slurm_adopt perlapi pmi pmi2 seff sgather sgi sjobexit torque
++SUBDIRS = lua mic nss_slurm openlava pam pam_slurm_adopt perlapi pmi pmi2 seff sgather sgi sjobexit torque
  
  EXTRA_DIST = \
- 	gcp			\
+ 	make-3.81.slurm.patch	\
+diff --git a/src/plugins/acct_gather_energy/Makefile.am b/src/plugins/acct_gather_energy/Makefile.am
+index 50c4fd36a2..c826387219 100644
+--- a/src/plugins/acct_gather_energy/Makefile.am
++++ b/src/plugins/acct_gather_energy/Makefile.am
+@@ -1,3 +1,3 @@
+ # Makefile for accounting gather energy plugins
+ 
+-SUBDIRS = cray_aries rapl ibmaem ipmi none xcc
++SUBDIRS = rapl ibmaem ipmi none xcc
+diff --git a/src/plugins/core_spec/Makefile.am b/src/plugins/core_spec/Makefile.am
+index 44b1ed67c0..f06bc541d7 100644
+--- a/src/plugins/core_spec/Makefile.am
++++ b/src/plugins/core_spec/Makefile.am
+@@ -1,3 +1,3 @@
+ # Makefile for core specialization plugins
+ 
+-SUBDIRS = cray_aries none
++SUBDIRS = none
+diff --git a/src/plugins/job_container/Makefile.am b/src/plugins/job_container/Makefile.am
+index 8e1960a456..529a9d581d 100644
+--- a/src/plugins/job_container/Makefile.am
++++ b/src/plugins/job_container/Makefile.am
+@@ -1,3 +1,3 @@
+ # Makefile for job_container plugins
+ 
+-SUBDIRS = cncu none
++SUBDIRS = none
+diff --git a/src/plugins/job_submit/Makefile.am b/src/plugins/job_submit/Makefile.am
+index e393bcfb1c..b98cf2e000 100644
+--- a/src/plugins/job_submit/Makefile.am
++++ b/src/plugins/job_submit/Makefile.am
+@@ -2,7 +2,6 @@
+ 
+ SUBDIRS = \
+ 	all_partitions \
+-	cray_aries \
+ 	defaults \
+ 	logging \
+ 	lua \
+diff --git a/src/plugins/node_features/Makefile.am b/src/plugins/node_features/Makefile.am
+index f5ef036303..d955c51ba1 100644
+--- a/src/plugins/node_features/Makefile.am
++++ b/src/plugins/node_features/Makefile.am
+@@ -1,3 +1,3 @@
+ # Makefile for node_features plugins
+ 
+-SUBDIRS = knl_cray knl_generic
++SUBDIRS = knl_generic
+diff --git a/src/plugins/power/Makefile.am b/src/plugins/power/Makefile.am
+index ccde44c322..c6171740c1 100644
+--- a/src/plugins/power/Makefile.am
++++ b/src/plugins/power/Makefile.am
+@@ -1,3 +1,3 @@
+ # Makefile for power management plugins
+ 
+-SUBDIRS = common cray_aries none
++SUBDIRS = common none
+diff --git a/src/plugins/select/Makefile.am b/src/plugins/select/Makefile.am
+index 09fdfd2313..570af23c4a 100644
+--- a/src/plugins/select/Makefile.am
++++ b/src/plugins/select/Makefile.am
+@@ -1,7 +1,7 @@
+ # Makefile for node selection plugins
+ 
+ # NOTE: other must be in the list before cray_aries lest the build break
+-SUBDIRS = other cons_res cons_tres cray_aries linear
++SUBDIRS = other cons_res cons_tres linear
+ 
+ # Each plugin here needs a plugin_id, here are the currect plug_ids
+ # for each plugin.
+diff --git a/src/plugins/switch/Makefile.am b/src/plugins/switch/Makefile.am
+index ddfe019a65..39a2b3eb7f 100644
+--- a/src/plugins/switch/Makefile.am
++++ b/src/plugins/switch/Makefile.am
+@@ -1,3 +1,3 @@
+ # Makefile for switch plugins
+ 
+-SUBDIRS = cray_aries generic none
++SUBDIRS = generic none
+diff --git a/src/plugins/task/Makefile.am b/src/plugins/task/Makefile.am
+index 8d2a36eb68..607af1cb7c 100644
+--- a/src/plugins/task/Makefile.am
++++ b/src/plugins/task/Makefile.am
+@@ -1,6 +1,6 @@
+ # Makefile for task plugins
+ 
+-SUBDIRS = cray_aries none
++SUBDIRS = none
+ 
+ if HAVE_SCHED_SETAFFINITY
+ SUBDIRS += affinity
diff --git a/slurm_fix_testsuite.patch b/slurm_fix_testsuite.patch
new file mode 100644
index 0000000..4cf2c80
--- /dev/null
+++ b/slurm_fix_testsuite.patch
@@ -0,0 +1,579 @@
+commit 7fa8a69d8eda68ac1fa144de7686e47d18161037
+Author: Philip Kovacs <pkdevel@yahoo.com>
+Date:   Fri Jun 7 07:33:01 2019 -0600
+
+    patch for 19.05.0 testsuite `make check` errors
+    
+    bug 7197
+
+diff --git a/testsuite/slurm_unit/common/slurm_protocol_pack/pack_job_alloc_info_msg-test.c b/testsuite/slurm_unit/common/slurm_protocol_pack/pack_job_alloc_info_msg-test.c
+index 2f245622e7..ca95f636a8 100644
+--- a/testsuite/slurm_unit/common/slurm_protocol_pack/pack_job_alloc_info_msg-test.c
++++ b/testsuite/slurm_unit/common/slurm_protocol_pack/pack_job_alloc_info_msg-test.c
+@@ -59,7 +59,7 @@ START_TEST(pack_1702_req_null_ptrs)
+ 	unpack_req = (job_alloc_info_msg_t *)msg.data;
+ 	ck_assert_int_eq(rc, SLURM_SUCCESS);
+ 	ck_assert(unpack_req);
+-	ck_assert(!unpack_req->req_cluster); /* >= 17.11 */
++	//ck_assert(!unpack_req->req_cluster); /* >= 17.11 */
+ 	ck_assert_uint_eq(unpack_req->job_id, pack_req.job_id);
+ 
+ 	free_buf(buf);
+@@ -94,7 +94,7 @@ START_TEST(pack_1702_req)
+ 	unpack_req = (job_alloc_info_msg_t *)msg.data;
+ 	ck_assert_int_eq(rc, SLURM_SUCCESS);
+ 	ck_assert(unpack_req);
+-	ck_assert(!unpack_req->req_cluster); /* >= 17.11 */
++	//ck_assert(!unpack_req->req_cluster); /* >= 17.11 */
+ 	ck_assert_uint_eq(unpack_req->job_id, pack_req.job_id);
+ 
+ 	free_buf(buf);
+diff --git a/testsuite/slurm_unit/common/slurmdb_pack/pack_federation_rec-test.c b/testsuite/slurm_unit/common/slurmdb_pack/pack_federation_rec-test.c
+index dd10e1b857..d068fef66d 100644
+--- a/testsuite/slurm_unit/common/slurmdb_pack/pack_federation_rec-test.c
++++ b/testsuite/slurm_unit/common/slurmdb_pack/pack_federation_rec-test.c
+@@ -236,9 +236,9 @@ Suite* suite(void)
+ 	TCase* tc_core = tcase_create("Pack slurmdb_federation_rec_t");
+ 	tcase_add_test(tc_core, invalid_protocol);
+ 	tcase_add_test(tc_core, pack_1702_federation_rec);
+-	tcase_add_test(tc_core, pack_1702_null_federation_rec);
++	//tcase_add_test(tc_core, pack_1702_null_federation_rec);
+ 	tcase_add_test(tc_core, pack_1702_federation_rec_empty_list);
+-	tcase_add_test(tc_core, pack_1702_federation_rec_fail);
++	//tcase_add_test(tc_core, pack_1702_federation_rec_fail);
+ 
+ 	tcase_add_test(tc_core, pack_1711_federation_rec);
+ 	tcase_add_test(tc_core, pack_1711_null_federation_rec);
+diff --git a/testsuite/slurm_unit/common/xhash-test.c b/testsuite/slurm_unit/common/xhash-test.c
+index 46616aef2b..2fc4d1d373 100644
+--- a/testsuite/slurm_unit/common/xhash-test.c
++++ b/testsuite/slurm_unit/common/xhash-test.c
+@@ -49,12 +49,11 @@ typedef struct hashable_st {
+ 	uint32_t idn;
+ } hashable_t;
+ 
+-const char* hashable_identify(void* voiditem)
++void hashable_identify(void* voiditem, const char** key, uint32_t* key_len)
+ {
+ 	hashable_t* item = (hashable_t*)voiditem;
+-	if (!item->id[0]) snprintf(item->id, 255, "%lu",
+-			(unsigned long)item->idn);
+-	return item->id;
++	*key = item->id;
++	*key_len = strlen(item->id);
+ }
+ 
+ /*****************************************************************************
+@@ -71,7 +70,7 @@ static void setup(void)
+ 	g_ht = xhash_init(hashable_identify, NULL);
+ 	if (!g_ht) return; /* fatal error, will be detected by test cases */
+ 	for (i = 0; i < g_hashableslen; ++i) {
+-		g_hashables[i].id[0] = 0;
++		snprintf(g_hashables[i].id, sizeof(g_hashables[i].id), "%d", i);
+ 		g_hashables[i].idn = i;
+ 		/* it is an error if xhash_add returns null but it will be
+ 		 * detected by test cases */
+@@ -120,7 +119,7 @@ START_TEST(test_add)
+ 	fail_unless(xhash_add(ht, a+3) != NULL, "xhash_add failed");
+ 	for (i = 0; i < len; ++i) {
+ 		snprintf(buffer, sizeof(buffer), "%d", i);
+-		fail_unless(xhash_get(ht, buffer) == (a + i),
++		fail_unless(xhash_get_str(ht, buffer) == (a + i),
+ 				"bad hashable item returned");
+ 	}
+ 	xhash_free(ht);
+@@ -134,14 +133,14 @@ START_TEST(test_find)
+ 	int i;
+ 
+ 	/* test bad match */
+-	fail_unless(xhash_get(ht, "bad") == NULL  , "invalid case not null");
+-	fail_unless(xhash_get(ht, "-1") == NULL   , "invalid case not null");
+-	fail_unless(xhash_get(ht, "10000") == NULL, "invalid case not null");
++	fail_unless(xhash_get_str(ht, "bad") == NULL  , "invalid case not null");
++	fail_unless(xhash_get_str(ht, "-1") == NULL   , "invalid case not null");
++	fail_unless(xhash_get_str(ht, "10000") == NULL, "invalid case not null");
+ 
+ 	/* test all good indexes */
+ 	for (i = 0; i < g_hashableslen; ++i) {
+ 		snprintf(buffer, sizeof(buffer), "%d", i);
+-		fail_unless(xhash_get(ht, buffer) == (g_hashables + i),
++		fail_unless(xhash_get_str(ht, buffer) == (g_hashables + i),
+ 				"bad hashable item returned");
+ 	}
+ }
+@@ -156,7 +155,7 @@ static int test_delete_helper()
+ 	char buffer[255];
+ 	for (i = 0; i < g_hashableslen; ++i) {
+ 		snprintf(buffer, sizeof(buffer), "%d", i);
+-		if (xhash_get(ht, buffer) != (g_hashables + i)) {
++		if (xhash_get_str(ht, buffer) != (g_hashables + i)) {
+ 			++ret;
+ 		}
+ 	}
+@@ -170,10 +169,10 @@ START_TEST(test_delete)
+ 	char buffer[255];
+ 
+ 	/* invalid cases */
+-	xhash_delete(NULL, "1");
+-	fail_unless(xhash_get(ht, "1") != NULL, "invalid case null");
++	xhash_delete_str(NULL, "1");
++	fail_unless(xhash_get_str(ht, "1") != NULL, "invalid case null");
+ 	/* Deleting non-existent item should do nothing. */
+-	xhash_delete(ht, NULL);
++	xhash_delete(ht, NULL, 0);
+ 	fail_unless(xhash_count(ht) == g_hashableslen,
+ 			"invalid delete has been done");
+ 	result = test_delete_helper();
+@@ -182,17 +181,17 @@ START_TEST(test_delete)
+ 			result);
+ 
+ 	/* test correct deletion */
+-	xhash_delete(ht, "10");
+-	fail_unless(xhash_get(ht, "10") == NULL, "item not deleted");
++	xhash_delete_str(ht, "10");
++	fail_unless(xhash_get_str(ht, "10") == NULL, "item not deleted");
+ 	fail_unless(xhash_count(ht) == (g_hashableslen-1), "bad count");
+ 	/* left edge */
+-	xhash_delete(ht, "0");
+-	fail_unless(xhash_get(ht, "0") == NULL, "item not deleted");
++	xhash_delete_str(ht, "0");
++	fail_unless(xhash_get_str(ht, "0") == NULL, "item not deleted");
+ 	fail_unless(xhash_count(ht) == (g_hashableslen-2), "bad count");
+ 	/* right edge */
+ 	snprintf(buffer, sizeof(buffer), "%u", (g_hashableslen-2));
+-	xhash_delete(ht, buffer);
+-	fail_unless(xhash_get(ht, "0") == NULL, "item not deleted");
++	xhash_delete_str(ht, buffer);
++	fail_unless(xhash_get_str(ht, "0") == NULL, "item not deleted");
+ 	fail_unless(xhash_count(ht) == (g_hashableslen-3), "bad count");
+ 
+ 	result = test_delete_helper();
+commit b0db3f0fbfdfc9a7820f24c4b30adee696dc863a
+Author: Morris Jette <jette@schedmd.com>
+Date:   Fri Jun 7 07:57:26 2019 -0600
+
+    Modify "make check" to validate v1808 un/pack logic
+    
+    bug 7197
+
+diff --git a/testsuite/slurm_unit/common/slurmdb_pack/pack_federation_rec-test.c b/testsuite/slurm_unit/common/slurmdb_pack/pack_federation_rec-test.c
+index d068fef66d..bbeeefc4a7 100644
+--- a/testsuite/slurm_unit/common/slurmdb_pack/pack_federation_rec-test.c
++++ b/testsuite/slurm_unit/common/slurmdb_pack/pack_federation_rec-test.c
+@@ -32,29 +32,26 @@ START_TEST(invalid_protocol)
+ }
+ END_TEST
+ 
+-START_TEST(pack_1702_null_federation_rec)
++START_TEST(pack_1711_null_federation_rec)
+ {
+ 	int rc;
+ 	Buf buf = init_buf(1024);
+-	slurmdb_federation_rec_t pack_fr = {0};
+ 
+ 	slurmdb_pack_federation_rec(NULL, SLURM_MIN_PROTOCOL_VERSION, buf);
+ 
+ 	set_buf_offset(buf, 0);
+ 
+-	slurmdb_federation_rec_t *unpack_fr;
++	slurmdb_federation_rec_t *unpack_fr = NULL;
+ 	rc = slurmdb_unpack_federation_rec((void **)&unpack_fr, SLURM_MIN_PROTOCOL_VERSION, buf);
+-	ck_assert(rc                   == SLURM_SUCCESS);
+-	ck_assert(pack_fr.name         == unpack_fr->name);
+-	ck_assert(pack_fr.flags        == unpack_fr->flags);
+-	ck_assert(pack_fr.cluster_list == unpack_fr->cluster_list);
++	ck_assert(rc        == SLURM_SUCCESS);
++	ck_assert(unpack_fr == NULL);
+ 
+ 	free_buf(buf);
+ 	slurmdb_destroy_federation_rec(unpack_fr);
+ }
+ END_TEST
+ 
+-START_TEST(pack_1702_federation_rec)
++START_TEST(pack_1711_federation_rec)
+ {
+ 	int rc;
+ 
+@@ -90,7 +87,7 @@ START_TEST(pack_1702_federation_rec)
+ END_TEST
+ 
+ 
+-START_TEST(pack_1702_federation_rec_empty_list)
++START_TEST(pack_1711_federation_rec_empty_list)
+ {
+ 	int rc;
+ 
+@@ -118,31 +115,7 @@ START_TEST(pack_1702_federation_rec_empty_list)
+ END_TEST
+ 
+ 
+-/* This test sets up the buffer so that it fails when unpacking the cluster rec.
+- */
+-START_TEST(pack_1702_federation_rec_fail)
+-{
+-	int rc;
+-	char *name = xstrdup("Saint Augustine");
+-	Buf buf = init_buf(18*sizeof(uint32_t));
+-	packstr(name, buf);
+-	pack32(7, buf);
+-	pack32(1, buf);
+-
+-	set_buf_offset(buf, 0);
+-
+-	slurmdb_federation_rec_t *unpack_fr;
+-	rc = slurmdb_unpack_federation_rec((void **)&unpack_fr, SLURM_MIN_PROTOCOL_VERSION, buf);
+-	ck_assert_int_eq(rc, SLURM_ERROR);
+-
+-	free_buf(buf);
+-	xfree(name);
+-}
+-END_TEST
+-
+-
+-/* 17.11 */
+-START_TEST(pack_1711_null_federation_rec)
++START_TEST(pack_1808_null_federation_rec)
+ {
+ 	int rc;
+ 	Buf buf = init_buf(1024);
+@@ -161,7 +134,7 @@ START_TEST(pack_1711_null_federation_rec)
+ }
+ END_TEST
+ 
+-START_TEST(pack_1711_federation_rec)
++START_TEST(pack_1808_federation_rec)
+ {
+ 	int rc;
+ 
+@@ -197,7 +170,7 @@ START_TEST(pack_1711_federation_rec)
+ END_TEST
+ 
+ 
+-START_TEST(pack_1711_federation_rec_empty_list)
++START_TEST(pack_1808_federation_rec_empty_list)
+ {
+ 	int rc;
+ 
+@@ -235,15 +208,14 @@ Suite* suite(void)
+ 	Suite* s = suite_create("Pack slurmdb_federation_rec_t");
+ 	TCase* tc_core = tcase_create("Pack slurmdb_federation_rec_t");
+ 	tcase_add_test(tc_core, invalid_protocol);
+-	tcase_add_test(tc_core, pack_1702_federation_rec);
+-	//tcase_add_test(tc_core, pack_1702_null_federation_rec);
+-	tcase_add_test(tc_core, pack_1702_federation_rec_empty_list);
+-	//tcase_add_test(tc_core, pack_1702_federation_rec_fail);
+-
+ 	tcase_add_test(tc_core, pack_1711_federation_rec);
+ 	tcase_add_test(tc_core, pack_1711_null_federation_rec);
+ 	tcase_add_test(tc_core, pack_1711_federation_rec_empty_list);
+ 
++	tcase_add_test(tc_core, pack_1808_federation_rec);
++	tcase_add_test(tc_core, pack_1808_null_federation_rec);
++	tcase_add_test(tc_core, pack_1808_federation_rec_empty_list);
++
+ 	suite_add_tcase(s, tc_core);
+ 	return s;
+ }
+commit 8aade6d1a3b25ee43b466f7c5624f5199b7bf0ec
+Author: Morris Jette <jette@schedmd.com>
+Date:   Fri Jun 7 08:14:50 2019 -0600
+
+    Rename some "make check" functions names to be generic
+    
+    bug 7197
+
+diff --git a/testsuite/slurm_unit/common/slurmdb_pack/pack_federation_rec-test.c b/testsuite/slurm_unit/common/slurmdb_pack/pack_federation_rec-test.c
+index bbeeefc4a7..6a48164027 100644
+--- a/testsuite/slurm_unit/common/slurmdb_pack/pack_federation_rec-test.c
++++ b/testsuite/slurm_unit/common/slurmdb_pack/pack_federation_rec-test.c
+@@ -32,7 +32,7 @@ START_TEST(invalid_protocol)
+ }
+ END_TEST
+ 
+-START_TEST(pack_1711_null_federation_rec)
++START_TEST(pack_back2_null_federation_rec)
+ {
+ 	int rc;
+ 	Buf buf = init_buf(1024);
+@@ -51,7 +51,7 @@ START_TEST(pack_1711_null_federation_rec)
+ }
+ END_TEST
+ 
+-START_TEST(pack_1711_federation_rec)
++START_TEST(pack_back2_federation_rec)
+ {
+ 	int rc;
+ 
+@@ -87,7 +87,7 @@ START_TEST(pack_1711_federation_rec)
+ END_TEST
+ 
+ 
+-START_TEST(pack_1711_federation_rec_empty_list)
++START_TEST(pack_back2_federation_rec_empty_list)
+ {
+ 	int rc;
+ 
+@@ -115,7 +115,7 @@ START_TEST(pack_1711_federation_rec_empty_list)
+ END_TEST
+ 
+ 
+-START_TEST(pack_1808_null_federation_rec)
++START_TEST(pack_back1_null_federation_rec)
+ {
+ 	int rc;
+ 	Buf buf = init_buf(1024);
+@@ -134,7 +134,7 @@ START_TEST(pack_1808_null_federation_rec)
+ }
+ END_TEST
+ 
+-START_TEST(pack_1808_federation_rec)
++START_TEST(pack_back1_federation_rec)
+ {
+ 	int rc;
+ 
+@@ -170,7 +170,7 @@ START_TEST(pack_1808_federation_rec)
+ END_TEST
+ 
+ 
+-START_TEST(pack_1808_federation_rec_empty_list)
++START_TEST(pack_back1_federation_rec_empty_list)
+ {
+ 	int rc;
+ 
+@@ -208,13 +208,13 @@ Suite* suite(void)
+ 	Suite* s = suite_create("Pack slurmdb_federation_rec_t");
+ 	TCase* tc_core = tcase_create("Pack slurmdb_federation_rec_t");
+ 	tcase_add_test(tc_core, invalid_protocol);
+-	tcase_add_test(tc_core, pack_1711_federation_rec);
+-	tcase_add_test(tc_core, pack_1711_null_federation_rec);
+-	tcase_add_test(tc_core, pack_1711_federation_rec_empty_list);
++	tcase_add_test(tc_core, pack_back2_federation_rec);
++	tcase_add_test(tc_core, pack_back2_null_federation_rec);
++	tcase_add_test(tc_core, pack_back2_federation_rec_empty_list);
+ 
+-	tcase_add_test(tc_core, pack_1808_federation_rec);
+-	tcase_add_test(tc_core, pack_1808_null_federation_rec);
+-	tcase_add_test(tc_core, pack_1808_federation_rec_empty_list);
++	tcase_add_test(tc_core, pack_back1_federation_rec);
++	tcase_add_test(tc_core, pack_back1_null_federation_rec);
++	tcase_add_test(tc_core, pack_back1_federation_rec_empty_list);
+ 
+ 	suite_add_tcase(s, tc_core);
+ 	return s;
+commit 549b1a3e6a8f6a677228209a2520595ffb42f98c
+Author: Morris Jette <jette@schedmd.com>
+Date:   Fri Jun 7 09:50:14 2019 -0600
+
+    Make check tests made more generic
+
+diff --git a/testsuite/slurm_unit/common/slurm_protocol_pack/pack_job_alloc_info_msg-test.c b/testsuite/slurm_unit/common/slurm_protocol_pack/pack_job_alloc_info_msg-test.c
+index ca95f636a8..85adb59ed1 100644
+--- a/testsuite/slurm_unit/common/slurm_protocol_pack/pack_job_alloc_info_msg-test.c
++++ b/testsuite/slurm_unit/common/slurm_protocol_pack/pack_job_alloc_info_msg-test.c
+@@ -33,7 +33,7 @@ START_TEST(pack_null_req)
+ END_TEST
+ #endif
+ 
+-START_TEST(pack_1702_req_null_ptrs)
++START_TEST(pack_back2_req_null_ptrs)
+ {
+ 	int rc;
+ 	Buf buf = init_buf(1024);
+@@ -59,7 +59,7 @@ START_TEST(pack_1702_req_null_ptrs)
+ 	unpack_req = (job_alloc_info_msg_t *)msg.data;
+ 	ck_assert_int_eq(rc, SLURM_SUCCESS);
+ 	ck_assert(unpack_req);
+-	//ck_assert(!unpack_req->req_cluster); /* >= 17.11 */
++	ck_assert(!unpack_req->req_cluster);
+ 	ck_assert_uint_eq(unpack_req->job_id, pack_req.job_id);
+ 
+ 	free_buf(buf);
+@@ -67,7 +67,7 @@ START_TEST(pack_1702_req_null_ptrs)
+ }
+ END_TEST
+ 
+-START_TEST(pack_1702_req)
++START_TEST(pack_back2_req)
+ {
+ 	int rc;
+ 	Buf buf = init_buf(1024);
+@@ -103,7 +103,7 @@ START_TEST(pack_1702_req)
+ }
+ END_TEST
+ 
+-START_TEST(pack_1711_req_null_ptrs)
++START_TEST(pack_back1_req_null_ptrs)
+ {
+ 	int rc;
+ 	Buf buf = init_buf(1024);
+@@ -136,7 +136,7 @@ START_TEST(pack_1711_req_null_ptrs)
+ }
+ END_TEST
+ 
+-START_TEST(pack_1711_req)
++START_TEST(pack_back1_req)
+ {
+ 	int rc;
+ 	Buf buf = init_buf(1024);
+@@ -188,10 +188,10 @@ Suite* suite(SRunner *sr)
+        if (srunner_fork_status(sr) != CK_NOFORK)
+                tcase_add_test_raise_signal(tc_core, pack_null_req, SIGABRT);
+ #endif
+-	tcase_add_test(tc_core, pack_1702_req_null_ptrs);
+-	tcase_add_test(tc_core, pack_1702_req);
+-	tcase_add_test(tc_core, pack_1711_req_null_ptrs);
+-	tcase_add_test(tc_core, pack_1711_req);
++	tcase_add_test(tc_core, pack_back2_req_null_ptrs);
++	tcase_add_test(tc_core, pack_back2_req);
++	tcase_add_test(tc_core, pack_back1_req_null_ptrs);
++	tcase_add_test(tc_core, pack_back1_req);
+ 	suite_add_tcase(s, tc_core);
+ 	return s;
+ }
+diff --git a/testsuite/slurm_unit/common/slurmdb_pack/pack_cluster_rec-test.c b/testsuite/slurm_unit/common/slurmdb_pack/pack_cluster_rec-test.c
+index c58149b48f..b2c6042888 100644
+--- a/testsuite/slurm_unit/common/slurmdb_pack/pack_cluster_rec-test.c
++++ b/testsuite/slurm_unit/common/slurmdb_pack/pack_cluster_rec-test.c
+@@ -20,7 +20,7 @@ START_TEST(invalid_protocol)
+ }
+ END_TEST
+ 
+-START_TEST(pack_1702_null_rec)
++START_TEST(pack_back2_null_rec)
+ {
+ 	int rc;
+ 	slurmdb_cluster_rec_t pack_rec;
+@@ -64,7 +64,7 @@ START_TEST(pack_1702_null_rec)
+ }
+ END_TEST
+ 
+-START_TEST(pack_1702_rec)
++START_TEST(pack_back2_rec)
+ {
+ 	int rc;
+ 	Buf buf = init_buf(1024);
+@@ -85,6 +85,9 @@ START_TEST(pack_1702_rec)
+ 	pack_rec.name             = xstrdup("name");
+ 	pack_rec.nodes            = xstrdup("nodes");
+ 	pack_rec.plugin_id_select = 8;
++	pack_rec.fed.feature_list = list_create(slurm_destroy_char);
++	slurm_addto_mode_char_list(pack_rec.fed.feature_list, "a,b,c", 0);
++	ck_assert_int_eq(list_count(pack_rec.fed.feature_list), 3);
+ 
+ 	/* will be tested separately. */
+ 	pack_rec.root_assoc       = NULL;
+@@ -126,9 +129,14 @@ START_TEST(pack_1702_rec)
+ 	ck_assert_str_eq(pack_rec.name, unpack_rec->name);
+ 	ck_assert_str_eq(pack_rec.nodes, unpack_rec->nodes);
+ 
+-	/* 17.11 */
+-	ck_assert(pack_rec.fed.feature_list == unpack_rec->fed.feature_list);
+-
++	char *feature;
++	ck_assert_int_eq(list_count(pack_rec.fed.feature_list), list_count(unpack_rec->fed.feature_list));
++	ListIterator itr = list_iterator_create(pack_rec.fed.feature_list);
++	while ((feature = list_next(itr))) {
++		if (!list_find_first(unpack_rec->fed.feature_list, slurm_find_char_in_list, feature))
++			ck_abort_msg("Didn't find feature %s in unpacked list",
++				     feature);
++	}
+ 
+ 	FREE_NULL_LIST(pack_rec.accounting_list);
+ 	xfree(pack_rec.control_host);
+@@ -140,7 +148,7 @@ START_TEST(pack_1702_rec)
+ }
+ END_TEST
+ 
+-START_TEST(pack_1702_rec_null_ptrs)
++START_TEST(pack_back2_rec_null_ptrs)
+ {
+ 	Buf buf = init_buf(1024);
+ 	slurmdb_cluster_rec_t pack_rec = {0};
+@@ -185,7 +193,6 @@ START_TEST(pack_1702_rec_null_ptrs)
+ 	ck_assert(pack_rec.rpc_version      == unpack_rec->rpc_version);
+ 	ck_assert(pack_rec.fed.recv         == unpack_rec->fed.recv);
+ 	ck_assert(pack_rec.fed.send         == unpack_rec->fed.send);
+-	/* 17.11 */
+ 	ck_assert(pack_rec.fed.feature_list == unpack_rec->fed.feature_list);
+ 
+ 	free_buf(buf);
+@@ -193,7 +200,7 @@ START_TEST(pack_1702_rec_null_ptrs)
+ }
+ END_TEST
+ 
+-START_TEST(pack_1711_null_rec)
++START_TEST(pack_back1_null_rec)
+ {
+ 	int rc;
+ 	slurmdb_cluster_rec_t pack_rec;
+@@ -204,7 +211,6 @@ START_TEST(pack_1711_null_rec)
+ 	pack_rec.fed.state        = 0;
+ 	pack_rec.dimensions       = 1;
+ 	pack_rec.plugin_id_select = NO_VAL;
+-
+ 	slurmdb_pack_cluster_rec(NULL, SLURM_ONE_BACK_PROTOCOL_VERSION, buf);
+ 
+ 	set_buf_offset(buf, 0);
+@@ -218,7 +224,6 @@ START_TEST(pack_1711_null_rec)
+ 	ck_assert(pack_rec.nodes           == unpack_rec->nodes);
+ 	ck_assert(pack_rec.fed.recv        == unpack_rec->fed.recv);
+ 	ck_assert(pack_rec.fed.send        == unpack_rec->fed.send);
+-	/* 17.11 */
+ 	ck_assert(pack_rec.fed.feature_list == unpack_rec->fed.feature_list);
+ 
+ 	/* root_assoc gets unpacked into a empty structure */
+@@ -237,7 +242,7 @@ START_TEST(pack_1711_null_rec)
+ }
+ END_TEST
+ 
+-START_TEST(pack_1711_rec)
++START_TEST(pack_back1_rec)
+ {
+ 	int rc;
+ 	Buf buf = init_buf(1024);
+@@ -302,7 +307,6 @@ START_TEST(pack_1711_rec)
+ 	ck_assert_str_eq(pack_rec.name, unpack_rec->name);
+ 	ck_assert_str_eq(pack_rec.nodes, unpack_rec->nodes);
+ 
+-	/* 17.11 */
+ 	char *feature;
+ 	ck_assert_int_eq(list_count(pack_rec.fed.feature_list), list_count(unpack_rec->fed.feature_list));
+ 	ListIterator itr = list_iterator_create(pack_rec.fed.feature_list);
+@@ -322,7 +326,7 @@ START_TEST(pack_1711_rec)
+ }
+ END_TEST
+ 
+-START_TEST(pack_1711_rec_null_ptrs)
++START_TEST(pack_back1_rec_null_ptrs)
+ {
+ 	Buf buf = init_buf(1024);
+ 	slurmdb_cluster_rec_t pack_rec = {0};
+@@ -367,7 +371,6 @@ START_TEST(pack_1711_rec_null_ptrs)
+ 	ck_assert(pack_rec.rpc_version      == unpack_rec->rpc_version);
+ 	ck_assert(pack_rec.fed.recv         == unpack_rec->fed.recv);
+ 	ck_assert(pack_rec.fed.send         == unpack_rec->fed.send);
+-	/* 17.11 */
+ 	ck_assert(pack_rec.fed.feature_list == unpack_rec->fed.feature_list);
+ 
+ 	free_buf(buf);
+@@ -385,13 +388,13 @@ Suite* suite(void)
+ 	TCase* tc_core = tcase_create("Pack slurmdb_cluster_rec_t");
+ 	tcase_add_test(tc_core, invalid_protocol);
+ 
+-	tcase_add_test(tc_core, pack_1711_null_rec);
+-	tcase_add_test(tc_core, pack_1711_rec);
+-	tcase_add_test(tc_core, pack_1711_rec_null_ptrs);
++	tcase_add_test(tc_core, pack_back1_null_rec);
++	tcase_add_test(tc_core, pack_back1_rec);
++	tcase_add_test(tc_core, pack_back1_rec_null_ptrs);
+ 
+-	tcase_add_test(tc_core, pack_1702_null_rec);
+-	tcase_add_test(tc_core, pack_1702_rec);
+-	tcase_add_test(tc_core, pack_1702_rec_null_ptrs);
++	tcase_add_test(tc_core, pack_back2_null_rec);
++	tcase_add_test(tc_core, pack_back2_rec);
++	tcase_add_test(tc_core, pack_back2_rec_null_ptrs);
+ 
+ 	suite_add_tcase(s, tc_core);
+ 	return s;
diff --git a/slurm_to_python3.patch b/slurm_to_python3.patch
index fdfcbe8..c60e941 100644
--- a/slurm_to_python3.patch
+++ b/slurm_to_python3.patch
@@ -38,16 +38,6 @@ index 54909096b9..93433d6fa3 100755
  
  import re
  import sys
-diff --git a/testsuite/expect/driveregress.py b/testsuite/expect/driveregress.py
-index 8019615953..4e7eb7ca0f 100755
---- a/testsuite/expect/driveregress.py
-+++ b/testsuite/expect/driveregress.py
-@@ -1,4 +1,4 @@
--#!/usr/bin/env python
-+#!/usr/bin/env python3
- 
- ############################################################################
- # Copyright (C) 2011-2013 SchedMD LLC
 diff --git a/testsuite/expect/regression.py b/testsuite/expect/regression.py
 index 938aecc154..ea64c7cce0 100755
 --- a/testsuite/expect/regression.py
diff --git a/sources b/sources
index dff51b9..bcddb1a 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (slurm-18.08.7.tar.bz2) = d0047086f1b716877cc5bb39539bf96a8fd08b1851c85fd85112c6432c1ce2a0f29fc9dd8803094c8fa44d063cec5f417e6bed231b6d338934ff4b48424a5a93
+SHA512 (slurm-19.05.0.tar.bz2) = f91efbd8c96c5c25dcf7c3f73f61ab9b5d591a554447e5a7db0346ace2e9a1053bebce5f16e9d15c23d78743319997aaac51f6d5bceda7cfaa4877a6f439cff1