| 
									
										
										
										
											2018-03-20 19:31:51 +08:00
										 |  |  | package buildah | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							| 
									
										
										
										
											2022-07-06 17:14:06 +08:00
										 |  |  | 	"errors" | 
					
						
							|  |  |  | 	"fmt" | 
					
						
							| 
									
										
										
										
											2018-03-20 19:31:51 +08:00
										 |  |  | 	"strings" | 
					
						
							|  |  |  | 	"testing" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/opencontainers/runtime-tools/generate" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func TestAddRlimits(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2025-02-04 13:36:03 +08:00
										 |  |  | 	t.Parallel() | 
					
						
							| 
									
										
										
										
											2018-03-20 19:31:51 +08:00
										 |  |  | 	tt := []struct { | 
					
						
							|  |  |  | 		name   string | 
					
						
							|  |  |  | 		ulimit []string | 
					
						
							|  |  |  | 		test   func(error, *generate.Generator) error | 
					
						
							|  |  |  | 	}{ | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			name:   "empty ulimit", | 
					
						
							|  |  |  | 			ulimit: []string{}, | 
					
						
							| 
									
										
										
										
											2024-08-07 03:07:02 +08:00
										 |  |  | 			test: func(e error, _ *generate.Generator) error { | 
					
						
							| 
									
										
										
										
											2018-03-20 19:31:51 +08:00
										 |  |  | 				return e | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			name:   "invalid ulimit argument", | 
					
						
							|  |  |  | 			ulimit: []string{"bla"}, | 
					
						
							| 
									
										
										
										
											2024-08-07 03:07:02 +08:00
										 |  |  | 			test: func(e error, _ *generate.Generator) error { | 
					
						
							| 
									
										
										
										
											2018-03-20 19:31:51 +08:00
										 |  |  | 				if e == nil { | 
					
						
							| 
									
										
										
										
											2022-07-06 17:14:06 +08:00
										 |  |  | 					return errors.New("expected to receive an error but got nil") | 
					
						
							| 
									
										
										
										
											2018-03-20 19:31:51 +08:00
										 |  |  | 				} | 
					
						
							|  |  |  | 				errMsg := "invalid ulimit argument" | 
					
						
							|  |  |  | 				if !strings.Contains(e.Error(), errMsg) { | 
					
						
							| 
									
										
										
										
											2022-07-06 17:14:06 +08:00
										 |  |  | 					return fmt.Errorf("expected error message to include %#v in %#v", errMsg, e.Error()) | 
					
						
							| 
									
										
										
										
											2018-03-20 19:31:51 +08:00
										 |  |  | 				} | 
					
						
							|  |  |  | 				return nil | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			name:   "invalid ulimit type", | 
					
						
							|  |  |  | 			ulimit: []string{"bla=hard"}, | 
					
						
							| 
									
										
										
										
											2024-08-07 03:07:02 +08:00
										 |  |  | 			test: func(e error, _ *generate.Generator) error { | 
					
						
							| 
									
										
										
										
											2018-03-20 19:31:51 +08:00
										 |  |  | 				if e == nil { | 
					
						
							| 
									
										
										
										
											2022-07-06 17:14:06 +08:00
										 |  |  | 					return errors.New("expected to receive an error but got nil") | 
					
						
							| 
									
										
										
										
											2018-03-20 19:31:51 +08:00
										 |  |  | 				} | 
					
						
							|  |  |  | 				errMsg := "invalid ulimit type" | 
					
						
							|  |  |  | 				if !strings.Contains(e.Error(), errMsg) { | 
					
						
							| 
									
										
										
										
											2022-07-06 17:14:06 +08:00
										 |  |  | 					return fmt.Errorf("expected error message to include %#v in %#v", errMsg, e.Error()) | 
					
						
							| 
									
										
										
										
											2018-03-20 19:31:51 +08:00
										 |  |  | 				} | 
					
						
							|  |  |  | 				return nil | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			name:   "valid ulimit", | 
					
						
							|  |  |  | 			ulimit: []string{"fsize=1024:4096"}, | 
					
						
							|  |  |  | 			test: func(e error, g *generate.Generator) error { | 
					
						
							|  |  |  | 				if e != nil { | 
					
						
							|  |  |  | 					return e | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2019-02-23 10:08:09 +08:00
										 |  |  | 				rlimits := g.Config.Process.Rlimits | 
					
						
							| 
									
										
										
										
											2018-03-20 19:31:51 +08:00
										 |  |  | 				for _, rlimit := range rlimits { | 
					
						
							|  |  |  | 					if rlimit.Type == "RLIMIT_FSIZE" { | 
					
						
							|  |  |  | 						if rlimit.Hard != 4096 { | 
					
						
							| 
									
										
										
										
											2022-07-06 17:14:06 +08:00
										 |  |  | 							return fmt.Errorf("expected spec to have %#v hard limit set to %v but got %v", rlimit.Type, 4096, rlimit.Hard) | 
					
						
							| 
									
										
										
										
											2018-03-20 19:31:51 +08:00
										 |  |  | 						} | 
					
						
							|  |  |  | 						if rlimit.Soft != 1024 { | 
					
						
							| 
									
										
										
										
											2022-07-06 17:14:06 +08:00
										 |  |  | 							return fmt.Errorf("expected spec to have %#v hard limit set to %v but got %v", rlimit.Type, 1024, rlimit.Soft) | 
					
						
							| 
									
										
										
										
											2018-03-20 19:31:51 +08:00
										 |  |  | 						} | 
					
						
							|  |  |  | 						return nil | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2022-07-06 17:14:06 +08:00
										 |  |  | 				return errors.New("expected spec to have RLIMIT_FSIZE") | 
					
						
							| 
									
										
										
										
											2018-03-20 19:31:51 +08:00
										 |  |  | 			}, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-08 22:48:59 +08:00
										 |  |  | 	for _, tst := range tt { | 
					
						
							| 
									
										
										
										
											2018-06-27 04:35:43 +08:00
										 |  |  | 		g, _ := generate.New("linux") | 
					
						
							| 
									
										
										
										
											2020-02-08 01:54:18 +08:00
										 |  |  | 		err := addRlimits(tst.ulimit, &g, []string{}) | 
					
						
							| 
									
										
										
										
											2020-01-08 22:48:59 +08:00
										 |  |  | 		if testErr := tst.test(err, &g); testErr != nil { | 
					
						
							|  |  |  | 			t.Errorf("test %#v failed: %v", tst.name, testErr) | 
					
						
							| 
									
										
										
										
											2018-03-20 19:31:51 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } |